如何在then()中返回值

时间:2018-11-07 14:33:26

标签: angular rest typescript ionic-framework promise

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

我有一个名为login()的函数,需要返回一个User。该函数调用另一个函数,该函数调用我的后端。 login()函数需要等待诺言完成才能返回用户。问题是,如果我将退货放在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;
}

3 个答案:

答案 0 :(得分:2)

您的"height"函数不能直接返回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); }); } 函数,并使用login获取从服务器检索的.then值。

user

答案 1 :(得分:0)

如果您从loginPromise(): Promise<{}>变成类似loginPromise(){的简单内容,我认为它仍会返回值

答案 2 :(得分:0)

您无法从.then返回,您可以在此处使用的一种选择是使用async await,但是在这种情况下,您的login函数将返回promise,因此调用.then函数时,您需要在登录时调用login

async login(user: User): Promise<User> {
  this.user = user;

  return await this.loginPromise();
}