angular - REST 调用在 Observable.subscribe 的多步执行时被双重执行
问题描述
应用程序正在使用 Angular 2.4.3。目前存在2-3个月一次REST调用双执行的问题。请告诉我解决方法。
处理流程如下。
(1) 点击一个按钮。
(2)REST1
被执行。
(3) 当 ResponseStatus 的REST1
was被执行200
时。REST2
上述(3)REST2
是双重执行。
RESTService
它由同一时间的日志双重执行。
示例代码如下。我正在多步执行Observable.subscribe
,但代码内容有什么问题吗?
// (2) execution of REST1
let observable: Observable<Response> = this.http.get(requestOptions);
observable.subscribe((response: Response) => {
let responseData: any = response.response.json();
if (200 === response.status) {
no1 = responseData.xxx.no1;
no2 = responseData.xxx.no2;
no3 = responseData.xxx.no2;
// Abbreviation
let requestOptions: RequestOptions = new RequestOptions({
headers: headerParameters,
search: urlParameters
});
let body = {
"no1": no1,
"no2": no2,
"no3": no3,
};
let xxxDaoData: XxxDaoData = new XxxDaoData();
xxxDaoData.data = body;
// (3) execution of REST2 (REST is double executed)
let observable2: Observable<Response> = this.http.post(xxxDaoData, requestOptions);
observable2.subscribe((response: Response) => {
// Abbreviation
}
}
}
如果有关于 Angular 的错误信息和案例,请告诉我。
解决方案
它必须是您用来链接请求的命令式方法,请尝试反应式方法:
import { Observable } from 'rxjs';
import { concatMap } from 'rxjs/operators';
let request = observable.pipe(
concatMap(val => {
... somecode
return observable2;
})
);
request.subscribe(console.log);
推荐阅读
- swift - 如何使用 Alamofire 等待 API 响应
- powershell - 重新启用导入模块 Psreadline 警告
- oracle-sqldeveloper - SetUP Oracle SQL Developer Credentials 我的新 Windows 安装
- r - what is the difference between weights="cell" and weights="proportional" in r package emmeans
- python-3.x - SQLAlchemy 模棱两可的文字:错误。使用“文本()”错误
- node.js - 无法在 Mac 上安装 parcel/parcel-bundler
- python - 找到算法的 BigO
- python - 尝试使用 for 循环创建字典对
- r - 将一排除以下面的一排(以 2 个为一组)
- ruby - 在 BDD 中使用 have_content 检查页面上的多个内容