使用">axios操作async
请求的返回值的正确方法是什么";并返回另一个Promise
?
这个:
return axios.get('/home.json')
.then(({ data, ...res }) =>
new Promise({
data: data.json(),
...res
})
)
或
return new Promise(() => {
const { data, ...res } = await axios.get('/home.json')
return {
data: data.json(),
...res
}
})
…或者以上都没有?
由于axios.get()
已经返回一个承诺,您可以在承诺链上构建并从链的末端返回您的最终值,它将成为整个承诺链的解析值,将返回给调用者:
return axios.get('/home.json').then(data) =>
// build whatever return value you want here and just return it
// it will be the resolved value of the parent promise/chain
// If you want to pack it into an object, you can do so here
return {data: data};
});
如果在解包数据和构建最终结果时需要其他异步操作,那么只需将异步操作添加到上面的承诺链中(从链中返回一个承诺)。
注:我不明白你为什么认为.then(({ data, ...res })
是axios承诺结果的正确格式。据我从文档中所知,事实并非如此。它解析一个值,即请求的结果。另外,axios没有.json()
。它已经为您解析JSON结果(不像fetch()
)。
如果你想在fetch()
中工作,你必须单独读取和解析json,你可以这样做:
return fetch('/home.json').then(response) =>
return response.json();
}).then(result => {
// create whatever final result value you want and return it
return {data: result};
});
_
我觉得最好的方法是在try-catch
块内使用async-await
示例代码:
const getApi = async() => {
try{
const {data, ...res} = await axios.get('/home.json')
// this data is already in json usable format
}catch(e){
console.log('This error occurred',e)
}
}