Javascript返回带有promise的数据

时间:2018-05-19 23:24:43

标签: javascript

如何以承诺返回数据?我的下面代码工作正常但是当我将其切换为promise时,它不会返回任何数据。

export function userSignupRequest(username, password) {

  return (dispatch) => {
    if (username === 'hello@world.com' && password === 'admin') {
       console.log('Sign up success')
       dispatch(setLoginSuccess(true));
       return userAccountDataFromSever
     } else {
       console.log('Sing up failed')
       return new Error('Will be an error message from server')
     }    
  }
}

我可以通过userAccountDataFromSever从上面的代码中获得new Error('Will be an error message from server')console.log(userSignupRequest(email, password))但是,当我将其切换到下面时,它会返回undefined

export function userSignupRequest(username, password) {

  return (dispatch) => {
    Auth.signUp({
        username,
        password
    })
    .then(data => {
      console.log(data)
      dispatch(setLoginSuccess(true));
      return data;
    })
    .catch(err => {
      console.log(err)
      return new Error(err.message)
    });

  }
}

我如何使这项工作?

1 个答案:

答案 0 :(得分:2)

由于userSignupRequest将执行异步操作,因此它将成为异步函数。

当前在异步函数中'返回'值的方法是返回一个promise,然后使用.then()。catch()语法。

返回承诺的函数示例:

export function userSignupRequest(username, password) {
  return (dispatch) => {
    return new Promise((resolve, reject) => {
      Auth.signUp({
          username,
          password
      })
      .then(data => {
        console.log(data)
        dispatch(setLoginSuccess(true));
        return resolve(data);
      })
      .catch(err => {
        console.log(err)
        return reject(err);
      });
    });
  }
}

使用示例:

userSignupRequest('admin', 'admin')(dispatch)
  .then(user => console.log(`User ${user} signed up!`)
  .catch(err => console.error(err);