Search code examples
javascriptreactjsreact-nativeasync-awaitasyncstorage

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


I am promisifying the React Native AsyncStorage getItem method but I am being warned that it is returning a possible unhandled promise rejection. Here's what I'm doing, what's wrong with my code?

In App.js ComponentDidMount()

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

Then in localStorage.js

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

Thanks in advance.

UPDATE

I have now added error handling:

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

Seems to work - here's my extra logic that depends on the result of the AsyncStorage call:

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

Solution

  • Seems like this should work:

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