调用我的服务时,我有以下代码块。我所看到的是“IF-ELSE CODE BLOCK TWO'在“IF-ELSE CODE BLOCK ONE'之前执行”。为什么会发生这种情况,我需要做些什么来确保在代码块2之前执行代码块?
this.svsOrders.newOrderDetails(customerInfo).subscribe(
(data:any)=>{
//IF-ELSE CODE BLOCK ONE
if (data == 'Invalid User') {
this.isValidUser=false;
let alert = this.alertCtrl.create({
title: 'Submit Order',
message: 'Access Denied',
buttons: [
{
text: 'Ok',
role: 'cancel',
handler: () => {
console.log('Cancel clicked');
}
}],
enableBackdropDismiss: false
});
alert.present();
} //close if
else {
this.svsSummary.newOrderInfo(data);
} //close else
},
error=>this.errorMessage=<any>error
)
//IF-ELSE CODE BLOACK TWO
if(this.isValidUser){
console.log('isValidUser value(TRUE)', this.isValidUser)
this.navCtrl.setRoot(CategoryPage);
this.navCtrl.popToRoot;
this.svsSummary.clearItemList();
return
} else {
console.log('popping the page now.....')
this.navCtrl.pop();
}
感谢您的帮助。
A
答案 0 :(得分:0)
在this.svsOrders.newOrderDetails(customerInfo)
操作完成之前,不会执行subscribe方法中的代码。但是,订阅后的代码将在订阅后立即执行。
所以处理顺序是:
要更改此设置,您需要将Block 2代码移至也在订阅范围内。
如果您将两个代码块移动到一个方法中,然后从subscribe()调用该方法,则可能更清晰。
这样的事情:
this.svsOrders.newOrderDetails(customerInfo).subscribe(
(data:any) => this.myMethod(),
(error) => this.errorMessage=<any>error
)
myMethod(): void {
//IF-ELSE CODE BLOCK ONE
if (data == 'Invalid User') {
this.isValidUser=false;
let alert = this.alertCtrl.create({
title: 'Submit Order',
message: 'Access Denied',
buttons: [
{
text: 'Ok',
role: 'cancel',
handler: () => {
console.log('Cancel clicked');
}
}],
enableBackdropDismiss: false
});
alert.present();
} //close if
else {
this.svsSummary.newOrderInfo(data);
} //close else
}
//IF-ELSE CODE BLOACK TWO
if(this.isValidUser){
console.log('isValidUser value(TRUE)', this.isValidUser)
this.navCtrl.setRoot(CategoryPage);
this.navCtrl.popToRoot;
this.svsSummary.clearItemList();
return
} else {
console.log('popping the page now.....')
this.navCtrl.pop();
}
}