Правильное использование async при доступе к AsyncStorage - PullRequest
0 голосов
/ 12 января 2019

Я работаю над приложением React Native, которое использует jwt tokens для доступа к моему бэкэнд-API. Я пытаюсь сохранить токен в AsyncStorage, но похоже, что я неправильно использую async.

У меня есть утилита, которая помогает мне установить мои параметры fetch, и здесь я пытаюсь также получить jwt token из AsyncStorage, но я не смог правильно использовать async, чтобы получить знак Либо я получаю то, что выглядит как невыполненное обещание, либо получаю ошибку, которая говорит мне, что я неправильно использую await.

Я мог бы использовать некоторую помощь в правильном чтении jwt token в моей утилите fetch.

Вот как выглядит моя утилита:

import { getAccessToken } from '../utils/my-utils';

export const fetchOptionsGet = async () => {

    getAccessToken().then(token => {

        return {
            method: 'GET',
            mode: 'cors',
            headers: {
                "Content-Type": "application/json",
                "Authorization": "Bearer " + token
            }
        };
    });
}

А это код для getAccessToken() функции:

import { AsyncStorage } from "react-native";

export const getAccessToken = async () => {

    const accessToken = await AsyncStorage.getItem("access_token");

    return accessToken;
};

Думаю, проблема в том, что, поскольку я вызываю функцию async из моей функции fetchOptionsGet(), она также становится функцией async. В моем методе API, когда я пытался вызвать его с ключевым словом await, я получаю ошибку компиляции. Если я перевожу мой fetch вызов моего API внутри .then(token => { // API call here }), то получаю ошибку react-redux, сообщающую, что моя функция должна возвращать простой объект.

Как правильно читать мой jwt token и использовать его в моем fetch звонке?

Ответы [ 2 ]

0 голосов
/ 12 января 2019
export const fetchOptionsGet = async () => {
const accessToken = await AsyncStorage.getItem("access_token");
return {
  method: 'GET',
  mode: 'cors',
  headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + accessToken
  }
};
0 голосов
/ 12 января 2019
export const fetchOptionsGet = async () => {

    const token = await getAccessToken();
    return {
        method: 'GET',
        mode: 'cors',
        headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + token
    }
}

await ждет обещания разрешить. Тогда вы можете вернуть все, что вам нужно.

...