我知道有人问过类似的问题。但我会解释其中的区别。
我有一个名为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;
}
答案 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();
}