我正在尝试使用rxJS来处理来自angular2
中的http请求的响应这是代码:
isUserConfirmed(): boolean {
let result: boolean = false;
this.authService.isUserConfirmed().subscribe(
retrievedData => {
//if no errors from the server
if (retrievedData.success) {
//if the confirmed flag is true
if (retrievedData.payload){
result = true;
console.log("i"+result);
} else {
result = false;
}
} else {
this.showError(retrievedData.message);
}
},
error => {
this.showError(error);
});
console.log("o"+result);
return result;
},
showError(error) {
//...
}
编辑
当我运行它时,我得到了这个输出:
ofalse
itrue
这意味着在suscribe方法中结果值设置为true,但这不会更改返回的结果值 如何设置从订阅块内部返回值集?
答案 0 :(得分:1)
因为订阅块之外的控制台语句将首先执行。所以你的第一个console.log()将显示false。在订阅块内的console.log()之后将执行第二个。如果成功,它将成为现实。
如果Observable返回true,则结果应为:
isUserConfirmed(): boolean {
let result: boolean = false;
return this.authService.isUserConfirmed().subscribe(
retrievedData => {
//if no errors from the server
if (retrievedData.success) {
//if the confirmed flag is true
if (retrievedData.payload){
result = true;
console.log("i"+result);
}
} else {
this.showError(retrievedData.message);
}
return result
},
error => {
this.showError(error);
});
}
您可以通过这种方式返回值
y_size