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)
您的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)
| 归档时间: |
|
| 查看次数: |
14195 次 |
| 最近记录: |