在我遇到了与承诺相关的一定障碍的反应中编写应用程序时,我有一个负责授权请求的函数
export const authorizeRequest = async () => {
const token = await deviceStorage.getItem('accessToken');
return axios.create({
timeout: 2000,
headers: {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
});
};
为了从中获取数据,我用样式编写代码
authorizeRequest().then(a => a.get('http://192.168.0.60:8080/users/echo2/asd')
.then(response => ToastAndroid.show('Response ' + response.data, ToastAndroid.SHORT))
.catch(error => ToastAndroid.show('error ' + JSON.stringify(error), ToastAndroid.LONG)))
可以避免调用authorizeRequest().then(....)
时首次使用.then
,以使查询看起来像authorizeRequest().get('xxx').then(xxx).catch(xxx)
谢谢!
当您已经使用async/await
语法以使您的值从设备存储中获取值时,为什么使用promise
语法?
您可以使用async/await
重写代码,这使您更容易查看代码中发生的事情。
export const authorizeRequest = async (url) => {
try {
const token = await deviceStorage.getItem('accessToken');
const a = await axios.create({
timeout: 2000,
headers: {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
});
const response = a.get(url);
ToastAndroid.show('Response ' + response.data, ToastAndroid.SHORT);
// return response.data // <- you could return something here
} catch (error) {
ToastAndroid.show('error ' + JSON.stringify(error), ToastAndroid.LONG);
}
};
以上述方式编写代码意味着您可以避免保证链接。
然后,您可以以以下方式使用它:
await authorizeRequest('http://192.168.0.60:8080/users/echo2/asd')
如果您想从authorizeRequest
函数中获得一个值,则可以返回响应。DATA,您会这样访问它:
const data = authorizeRequest('http://192.168.0.60:8080/users/echo2/asd')
这是promises
和async/await
的一些很棒的文章。
- https://medium.com/@bluepnume/learn-about-promises-before-you-start-using-sasync-await-eb148164a9c8
- https://hackernoon.com/6-reasons-why-javascripts-sasync-await-blows-promises-away-way-tutorial-c7ec10518dd9