来自AsyncStorage的AccessToken + axios的请求

时间:2019-03-10 16:15:14

标签: react-native promise axios

在以本机语言编写应用程序时,遇到了与承诺有关的某些障碍,所以我有一个负责授权请求的功能

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) 谢谢!

1 个答案:

答案 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')

以下是有关promisesasync/await的一些很棒的文章。