Ionic framework 离子承诺与储存
设置存储或发现错误后如何返回API调用? 在console.log中,seq总是在存储的令牌之前返回 我希望的顺序是:Ionic framework 离子承诺与储存,ionic-framework,promise,ionic3,Ionic Framework,Promise,Ionic3,设置存储或发现错误后如何返回API调用? 在console.log中,seq总是在存储的令牌之前返回 我希望的顺序是: 用户使用函数SubmitForm()提交表单 该函数在user.ts页面中调用另一个函数,如果用户身份验证成功,将弹出login.ts页面 user.ts当前处理api调用并设置存储(如果身份验证成功)。在调用isLoggedIn检查(在login.ts页面中)后,存储总是延迟,因此无法弹出 login.ts SubmitForm(account: any) { thi
SubmitForm(account: any) {
this.user.login(account).subscribe((resp) => {
if(this.user.isLoggedIn){
this.navCtrl.pop();
}
}, (err) => {
});
}
user.ts(用户提供商)
当您有一个类似于您的函数并且需要“等待其中的异步函数完成”时,您需要使用async/wait。基本上,这将您的整个函数包装成一个承诺,然后返回。异步函数总是自动返回一个承诺 像这样的东西可以工作,但是我不太确定你的代码,因为你只提供了一个片段。如果您提供一个代码沙盒,我可以更深入地了解它
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
}
您需要在方法中使用async/await。我已经添加了login.ts页面。假设身份验证成功,但由于isLoggedIn尚未设置为true,navCtrl从未弹出。它没有设置为true的原因是存储尚未设置它。如果希望使用承诺,则需要使用async/await。对于这样的情况,当你用不好的眼光看待它时,你也可以简单地传递你的登录对象,然后在你存储完对象后调用一个方法,比如.afterLogin()。因此,您的登录方法调用将是login(account,this)
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
}