首页 > 解决方案 > REST 调用在 Observable.subscribe 的多步执行时被双重执行

问题描述

应用程序正在使用 Angular 2.4.3。目前存在2-3个月一次REST调用双执行的问题。请告诉我解决方法。

处理流程如下。

(1) 点击一个按钮。

(2)REST1被执行。

(3) 当 ResponseStatus 的REST1was被执行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 的错误信息和案例,请告诉我。

标签: angulartypescriptobservable

解决方案


现场示例

它必须是您用来链接请求的命令式方法,请尝试反应式方法:

import { Observable } from 'rxjs';
import { concatMap } from 'rxjs/operators';

let request = observable.pipe(
  concatMap(val => {
    ... somecode
    return observable2;
  })
);

request.subscribe(console.log);

推荐阅读