【发布时间】:2019-09-19 09:07:04
【问题描述】:
我正在尝试从 API 获取图像数据。为此,我首先需要获取它的 ID,然后使用它来获取图像。为了保持干净的代码,我使用了一个函数来做到这一点,当我尝试将响应返回给我调用该函数的组件时遇到问题。
getNextImageData
export const getNextImageData = () => {
const apiToken = lscache.get('apiToken')
return(
axios({
method: 'get',
url: 'https://myapiurl/images/',
params: {
limit: '1',
doc_cat: ''
},
responseType: 'json'
})
.then(response => {
lscache.set('imageData', response, 30)
axios({
method: 'get',
url: 'https://myapiurl/images/' + response.data[0].id + '/',
})
.then(response => {
return(response.data)
})
})
)
}
我的班级
class MyClass extends Component {
constructor(props){
super(props);
this.state = {
image: undefined
}
}
async componentDidMount() {
const data = await getNextImageData()
this.setState({
image: data,
})
}
render() {
// something
}
}
我没有收到任何返回,当我将代码直接粘贴到我的组件中时,它工作正常,但我想在函数中使用它
【问题讨论】:
-
你的 getNextImageData 函数没有返回你试图从 axios 等待的承诺。尝试在之前添加 return 语句:return axios({method:'get' ....
-
@jure 不幸的是,我已经尝试过了,我删除了它,因为我认为它会干扰函数返回。但由于它会引起混淆,我会编辑我的问题,谢谢
-
这样不行。而是从
getNextImageData()返回一个promise,然后将该承诺解析到您的组件中。 -
@TheCoder 我可以解析我的组件中的最后一个
promise,好的。但是我有两个嵌套的承诺,我该怎么做?解决组件中的两个嵌套请求?将这两个 axios 调用划分为两个不同的函数?
标签: reactjs promise async-await httprequest axios