如何操作axios响应并返回承诺?



使用">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)
}
}

相关内容

  • 没有找到相关文章

最新更新