在以本机语言编写应用程序时,遇到了与承诺有关的某些障碍,所以我有一个负责授权请求的功能
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)))
是否可以避免在调用.then
时第一次使用authorizeRequest().then(....)
,以便查询看起来像authorizeRequest().get('xxx').then(xxx).catch(xxx)
谢谢!
答案 0 :(得分:0)
当您已经在使用promise
语法从设备存储中获取价值时,为什么要使用async/await
语法?
您可以使用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
函数中获取一个值,则只需返回response.data即可,如下所示:
const data = authorizeRequest('http://192.168.0.60:8080/users/echo2/asd')
以下是有关promises
和async/await
的一些很棒的文章。