设置存储或发现错误后如何返回API调用? 从console.log中,总是在令牌存储之前返回 seq 。
我想要的顺序是:
login.ts
SubmitForm(account: any) {
this.user.login(account).subscribe((resp) => {
if(this.user.isLoggedIn){
this.navCtrl.pop();
}
}, (err) => {
});
}
user.ts(用户提供者)
login(logininfo: any) {
let seq = this.api.post('auth/login', logininfo).share();
seq.subscribe((res: any) => {
if (res.status == 'success') {
this.storage.set('token', res.token).then(data => {
console.log('Token Stored', data); //This always get called after `return seq;`
this.token = data;
this.isLoggedIn = true;
},
error => {
console.log('Error storing token', error);
});
}
}, err => {
console.error('ERROR', err);
});
return seq; //This always called before the token was stored
}
答案 0 :(得分:0)
当您有一个像您这样的函数并且需要“等待其中的异步函数完成”时,您需要使用async / await。基本上,这会将您的整个函数包装到一个Promise中,然后将其返回。异步函数总是自动返回Promise。
类似的事情可能起作用,但是由于您仅提供了一个代码段,因此我不太确定您的代码。如果您提供一个codeandbox,我可以对其进行更深入的了解。
async login(logininfo: any) {
let seq = this.api.post('auth/login', logininfo);
let returnValue = undefined;
let subscription = await seq.subscribe(async (res: any) => {
if (res.status == 'success') {
returnValue = await this.storage.set('token', res.token).then(data => {
console.log('Token Stored', data); //This always get called after `return seq;`
},
error => {
console.log('Error storing token', error);
});
}
}, err => {
console.error('ERROR', err);
});
return returnValue; //This always returns a promise
}