首页 > 解决方案 > Javascript 承诺返回数据

问题描述

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

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

  }
}

我该如何进行这项工作?

标签: javascript

解决方案


既然userSignupRequest会做异步操作,就变成了一个异步函数。

当前在异步函数中“返回”值的方法是返回一个承诺,然后使用 .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);

推荐阅读