可能未处理的承诺拒绝(id:0)React Native AsyncStorage

Possible Unhandled Promise Rejection (id: 0) React Native AsyncStorage

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

在App.jsComponentDidMount()

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();
}

你需要'catch'任何可能抛出的错误并处理它们(否则 React 会报错):

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

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

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

似乎这样应该可行:

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
  }
}