我在名为accountManager的服务中有一个函数,它返回一个如下所示的承诺:
此承诺上的.then()会触发并按预期打印出响应。
signIn(email:String,password:String):Promise<any>{
return this.http.post('http://localhost:3000/api/signin',JSON.stringify({
"email": email,
"password": password
}),{headers: this.headers})
.toPromise()
.then(res => {
//**This is defined**
console.log(res);
})
}
当我在另一个使用此signIn方法的类中时,会出现问题。 promise中的响应现在为null。当我省略函数本身的承诺时,返回的promise #then()有一个响应值。
if (this.loginForm.valid === true){
this.accountManager.signIn(this.email,this.password)
.then(response =>{
//**This .then has an undefined response when added on to the promise returned from the signIn function.**
let body = JSON.parse(response._body)
if (body.payload.success === true){
this.router.navigate(['/']);
}else{
this.signInError = true;
}
})
.catch(error=>{
this.signInError = true;
})
有没有人知道为什么promise .then()在返回promise时包含一个值但是return返回的promise没有值?#then()?我很乐意澄清是否有任何令人困惑的事情。谢谢:))
答案 0 :(得分:6)
正如@cartant所说,你在console.log
电话后没有回复res。 promise回调返回的值解析承诺。
new Promise(function(resolve) {
// this is almost equivalent
// to returning in promise callbacks
resolve(3);
})
.then(function(res) {
console.log(res); // logs 3
return 7;
})
.then(function(res) {
console.log(res); // logs 7
// no return, implicitly returns undefined
})
.then(function(res) {
console.log(res); // logs `undefined`
});
返回的值也可以是另一个承诺,因为后续的.then
回调将监听要解决的承诺:
new Promise(function(resolve) {
// this is almost equivalent
// to returning in promise callbacks
resolve(3);
})
.then(function(res) {
return Promise.resolve(5); // can create a Promise which resolves immediately
})
.then(function(res) {
console.log(res); // logs 5
});