如何在原生反应中链接获取和承诺?

时间:2016-10-29 20:11:58

标签: javascript api react-native promise fetch

今天我在我的本机应用中遇到了一个提取问题。我希望我的用户在注册后直接登录。为了做到这一点,我有一个函数来获取signUp,另一个函数来获取登录。问题是在视图中我单击register()按钮时,只调用signUp fetch。但是,如果我再次单击该按钮,则会调用注册和登录提取,但注册时会发生错误,因为用户已添加到数据库中。所以,我希望能够一个接一个地连接两个fetch。这是我的代码:

api助手类:

    const Api = {

  signUp(user) {
    return new Promise((resolve, reject) =>
    {
      console.log(Constant.default.apiUrl);
      fetch(Constant.default.apiUrl + '/signup', {
        method: 'POST',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(user)
      })
        .then(response => response.json())
        .then(responseJson => {
          if (responseJson.success) {
            console.log(responseJson.userData);
            resolve(responseJson.userData);
          } else {
            reject(responseJson);
          }
        })
        .catch(err => console.log(err));
    });
  },

  login(user) {
    return new Promise((resolve, reject) => {
      fetch(Constant.default.apiUrl + '/login', {
        method : 'POST',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(user)
      })
        .then(response => response.json())
        .then(responseJson => {
          console.log("responsejson " + responseJson);
          console.log("laaaa");
          if (responseJson.success) {
            resolve(responseJson.userData);
          } else {
            reject(responseJson);
          }
        })
        .catch(err => console.log("catch login" + err))
    })
  }
};

export default Api;

寄存器功能(当我点击注册按钮时):

register () {

    if (this.state.password.length > 3 && this.state.password === this.state.confirmPassword) {
      var user = {
        firstName: this.props.firstName,
        lastName: this.props.lastName,
        emailAddress: this.state.emailAddress,
        password: this.state.password,
      };

      Api.signUp(user)
        .then(result => {
          console.log("sign up result : " + JSON.stringify(result));
          return {
            emailAddress : user.emailAddress,
            password : user.password
          };
           })
        .then(loginUser => {
          Api.login(loginUser)
            .then(result => {
              console.log("login result " + JSON.stringify(result));
            })
            .catch(resultErr => console.log(resultErr));
        })
        .catch(resultErr => console.log(resultErr));

    } else {
      this.setState({error: true,
        errorMessage: 'Veuillez remplir les champs correctement'});
    }
  };

请帮我弄清楚为什么我必须在注册()按钮上单击两次。

提前感谢您的回答:)

编辑: 当我单击一次时,控制台中没有任何反应,但用户已添加到数据库中。第二次,我看到了这个: enter image description here

0 个答案:

没有答案