第二个.then()on promise被调用,数据为undefined

时间:2017-06-12 04:21:09

标签: javascript angular typescript promise rxjs

我在名为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()?我很乐意澄清是否有任何令人困惑的事情。谢谢:))

1 个答案:

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