React Native AsyncStorage.getItem无法正常工作。 ({“ _40”:0,“ _55”:null,“ _65”:0,“ _72”:null}

时间:2020-05-18 12:46:49

标签: react-native async-await apollo apollo-client asyncstorage

美好的一天!我具有AsyncStorage的此功能,该功能获取令牌项。我与ApolloClient一起使用来处理令牌,但是当我第一次对其进行测试时,AsyncStorage函数提供的内容似乎有错误。

export function jwtLogin(data) {
  return async dispatch => {
    const userData = {
      email: data.email,
      password: data.password,
    };
    console.log(userData);
    const client = new ApolloClient({
      link: new HttpLink({
        uri: API_URL,
      }),
      cache: new InMemoryCache(),
    });
    client
      .mutate({
        mutation: loginUser,
        variables: {
          email: userData.email,
          password: userData.password,
        },
      })
      .then(resp => {
        console.log(resp.data.tokenCreate);
        console.log('Token', resp.data.tokenCreate.token);
        if (resp.data.tokenCreate.token !== null) {
          saveJWTTokenData(resp.data.tokenCreate.token); //from AsyncStorage save function

          async function main() { //function of AsyncStorage
            await AsyncStorage.getItem('jwt_token').then(item => {
              return item;
            });
          }
          console.log(main()); // returns error
          Actions.push('main_loading');
        } else {
          const errors = resp.data.tokenCreate.errors;
          {
            errors.map(err => {
              Alert.alert('Error.', err.message);
            });
          }
        }
      })
      .catch(err => {
        Alert.alert('Error.', err.message);
      });
  };
}

有关保存存储功能:

export const saveJWTTokenData = async jwt_token => AsyncStorage.setItem('jwt_token', jwt_token);

My Error Log Picture

1 个答案:

答案 0 :(得分:0)

我认为您的Promise处理不正确。

尝试在随后的通话之后添加一个渔获物:

<div id="list" class="shadow-box-list" fxLayout="row wrap" fxLayoutGap="25px grid" fxFlexFill>
  <div class="widget" *ngFor="let element of elements" [fxFlex]="fxFlex">
    <div class="shadow-box-list-widget-content mat-elevation-z3" fxLayout="row" fxLayoutAlign="center center">
      <div class="name">{{element.name}}</div>
    </div>
  </div>
</div>

或者尝试像这样使用您的函数:

.catch(err => console.log(err))