如何在 then() 中返回值

Pur*_*onk 4 rest promise typescript ionic-framework angular

我知道也有人问过类似的问题。但我会解释其中的区别。

我有一个名为login()需要返回用户的函数。该函数调用另一个函数,该函数调用我的后端。该login()函数需要等待 Promise 完成才能返回 User。问题是,如果我把退货放入它then()会说:

[ts] 声明类型既不是“void”也不是“any”的函数必须返回一个值。

需要返回它,因为调用它的函数需要用户的 JWT。


简化代码:

login(user: User): User {
  this.user = user;
  //in between I fill some fields for the user
  this.loginPromise().then(user => {
    return user;
  })
  .catch(err => {
    console.log(err);
    //it doesn't make a difference wether I return a user here or not
}

loginPromise(): Promise<{}> {
 var promise = new Promise(function(resolve, reject) {
  this.restProvider.login(this.user)
  .subscribe(result => {
    const jwt = result.headers.get('JWT');
    const config = { ... result.body };
    if(config['result'] != 'failed'){
      this.user.$JsonWebToken = jwt;
      this.user.$passwordIsValid = true;
      this.user.$usernameIsValid = true;
      resolve(this.user);
    }
  }, err => {
    console.log("error: " + err);
    reject(err);
  });
 })
 return promise;
}
Run Code Online (Sandbox Code Playgroud)

Pan*_*kar 5

您的login函数不能User直接返回对象,它必须返回Promise<User>对象,因为它user异步获取对象。

login(user: User): Promise<User> {
  this.user = user;
  //in between I fill some fields for the user
  return this.loginPromise()
  .catch(err => {
    console.log(err);
  });
}
Run Code Online (Sandbox Code Playgroud)

然后消费者函数将调用login函数并使用.then来获取user从服务器检索到的值。

this.login().then(
  user => console.log(user);
)
Run Code Online (Sandbox Code Playgroud)