AccessToken от AsyncStorage + запрос по Axios - PullRequest
0 голосов
/ 10 марта 2019

При написании приложения на реактивном языке я столкнулся с определенным препятствием, связанным с обещаниями, поэтому у меня есть функция, отвечающая за авторизованный запрос

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 Ответ

1 голос
/ 10 марта 2019

Зачем использовать синтаксис 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...