Javascript 如何在react native中链接获取和承诺?
今天,我在react原生应用程序中遇到了一个获取问题。我希望我的用户注册后直接登录。为了做到这一点,我有一个函数获取注册,另一个函数获取登录。问题是,当我在视图中单击register()按钮时,只调用注册获取。但是,如果我再次单击按钮,则会调用注册和登录获取,但注册时会发生错误,因为用户已经添加到数据库中。因此,我希望能够链接两个fetch,一个接一个。这是我的密码: api帮助程序类:Javascript 如何在react native中链接获取和承诺?,javascript,api,react-native,promise,fetch,Javascript,Api,React Native,Promise,Fetch,今天,我在react原生应用程序中遇到了一个获取问题。我希望我的用户注册后直接登录。为了做到这一点,我有一个函数获取注册,另一个函数获取登录。问题是,当我在视图中单击register()按钮时,只调用注册获取。但是,如果我再次单击按钮,则会调用注册和登录获取,但注册时会发生错误,因为用户已经添加到数据库中。因此,我希望能够链接两个fetch,一个接一个。这是我的密码: api帮助程序类: const Api = { signUp(user) { return new Pro
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()按钮上单击两次
提前感谢您的回答:)
编辑:
当我单击一次时,控制台中不会发生任何事情,但是用户被添加到数据库中。第二次,我看到:
我忘了提到登录和注册是完全分开的;)快速猜测。。。signup方法中的response.json()调用未在第一次单击时激发Promise.reject之前完成,第二次单击时它已完成,因此进入登录方法。这似乎类似于如果您捕捉到日志记录/调试的错误,不要忘记重新抛出它们。@ZanyCadence-我认为这段代码不会这样做-如果它这样做了,它就不会在第二次单击时使用与第一次单击时相同的注册承诺,这段代码不是这样的written@MargotLeRouzic-不是问题,但你已经爱上了
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'});
}
};