可能的未处理的承诺拒绝(id:0)反应本机AsyncStorage

时间:2019-08-15 15:36:46

标签: javascript reactjs react-native async-await asyncstorage

我正在使用React Native AsyncStorage getItem方法,但是警告我它返回了可能的未处理的Promise拒绝。这是我在做什么,我的代码有什么问题?

在App.js ComponentDidMount()

  componentDidMount() {
    ConnectyCube.init(...config);
    authInitialization = async () => {
      const locallyStoredPhoneNumber = await getStoredPhoneNumber();
      console.log(locallyStoredPhoneNumber);
      authorizeFirebase(this.getFirebaseAccessToken);
      this.props.authorizing(true);
    }
    authInitialization();
  }

然后在localStorage.js

export const getStoredPhoneNumber = () => {
  return new Promise((resolve, reject) => {
    AsyncStorage.getItem('@phone_number', (error, result) => {
      result ? resolve(result) : reject(error);
    })
  })
}

谢谢。

更新

我现在添加了错误处理:

export const getStoredPhoneNumber = () => {
  return new Promise((resolve, reject) => {
    AsyncStorage.getItem('@phone_number', (error, result) => {
      result ? resolve(result) : reject(error);
    })
  }).catch(error => console.error(error))
}

似乎可以正常工作-这是我依赖AsyncStorage调用结果的额外逻辑:

  componentDidMount() {
    ConnectyCube.init(...config);
    authInitialization = async () => {
      const locallyStoredPhoneNumber = await getStoredPhoneNumber();
      locallyStoredPhoneNumber !== undefined
        ? authorizeFirebase(this.getFirebaseAccessToken) && this.props.authorizing(true)
        : this.setState({ newUser: true })
    }
    authInitialization();
  }

3 个答案:

答案 0 :(得分:2)

似乎应该可以工作:

async componentDidMount() {
    ConnectyCube.init(...config);
    try {
        const locallyStoredPhoneNumber = await AsyncStorage.getItem('@phone_number');
        locallyStoredPhoneNumber !== undefined
        ? authorizeFirebase(this.getFirebaseAccessToken) && this.props.authorizing(true)
        : this.setState({ newUser: true })
    } catch (e){
        // handle error
    }

  }

答案 1 :(得分:0)

您需要“捕获”可能引发的任何错误并进行处理(否则React会抱怨):

  componentDidMount() {
    authInitialization = async () => {
      try {
         const locallyStoredPhoneNumber = await getStoredPhoneNumber();
         ...
      } catch (e) { console.log(e) //handle error }
    }
    authInitialization();
  }

答案 2 :(得分:0)

处理承诺拒绝的一种方法是在返回您的承诺的地方使用try...catch块。

 try{
       const locallyStoredPhoneNumber = await getStoredPhoneNumber();
    } catch(error){
      //Error handling code here
    }