Search code examples
javascriptes6-promise

JavaScript, Promise rejection


I'm trying to create this promise:

const getTocStatus = new Promise((resolve, reject) => {
  const userInfo = Auth.currentUserInfo();
  resolve(userInfo.attributes['custom:tocStatus']);
  reject(new Error('Couldn\'t connect to Cognito'));
});

Then use it like this:

getTocStatus.then((response) => {
  if (response === 'pending) { //do sth }
}, error => console.log('Error:', error)

But I'm getting the Error:

[TypeError: undefined is not an object (evaluating 'userInfo.attributes['custom:tocStatus']')]

What is badly coded on the promise and it call?


Solution

  • Lionel's answer is correct (I didn't know what Auth.currentUserInfo was, but there's no need for the Promise constructor since you're already dealing with promises:

    const getTocStatus = async () => {
      try {
        const userInfo = await Auth.currentUserInfo()
        return userInfo.attributes['custom:tocStatus']
      } catch (e) {
        new Error("Couldn't connect to Cognito")
      }
    }
    
    // or with .then syntax
    const getTocStatus = () =>
      Auth.currentUserInfo()
        .then((userInfo) => userInfo.attributes['custom:tocStatus'])
        .catch((e) => { Promise.reject(new Error("Couldn't connect to Cognito")) })