我有一个组件类和服务类。我有接收http 200状态代码时翻转标志的逻辑。根据收到的响应,我使用if条件翻转标志。
Requests(data:Array<String>):Observable<any>{
return this.http.post(this.Url,data)
.map(
(res:Response) => {
if(res.status === 200 || res.status===201) {
return res.json()
}
}
)
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
组件文件是这样的。
methodName(selectedData){
this.service.Requests(Id).subscribe((Response => {
this.rResponse = Response;
}));
if(rResponse){
// My logic to flip the flag
}
}
}
}
因此,根据从服务收到的回复,我将翻转旗帜。
但是当我在调试工具中运行代码时,即使rResponse变量中有值,也不会调用翻转标志的逻辑。事实上,当调用methodName函数时,代码流会尝试首先在if循环下检查rResponse的值,然后在结束时调用subscribe方法。
如果可以,请建议订阅方法的工作流程。为什么在调用实际的subscribe方法之前调用if条件。
这不是重复,因为我想理解为什么流不会转到我的if循环。没有什么不确定的。我从服务中获取价值
答案 0 :(得分:0)
我的理解是你想在rResponse
收到价值时做一些逻辑。
正如您可能知道的那样,订阅方法调用本质上是异步的,即一旦请求它就会使执行恢复到下一行。
因此,如果条件在subscribe方法之外写入,则条件在服务调用完成之前立即执行。这导致空响应。
因此,您需要将if条件放在要分配this.rResponse = Response;
methodName (selectedData) {
this.service.Requests(Id).subscribe((Response => {
this.rResponse = Response;
if(this.rResponse) {
// My logic to flip the flag
}
}));
}