在Observable.subscribe的多步执行时,REST调用被双重执行

时间:2018-08-03 06:26:47

标签: angular typescript observable

应用程序正在使用Angular 2.4.3。 当前发生REST调用每2-3个月两次执行两次的问题。 请告诉我解决方法。

处理流程如下。

(1)单击一个按钮。

(2)collections = [['AAAAAA'], ['BBB'], ['CCCC'], ['DDDDDDD'], ['EEEEEEEEEEE']]; collection = collections.map(e => { return String(e) }); function shuffle(collection) { collection.sort(function (a, b) { // ASC -> a.length - b.length // DESC -> b.length - a.length return b.length - a.length; }); let sum = 0; for (let i = 1; i < collection.length; i++) { sum += collection[i].length; } if (sum < collection[0].length) { return `Letters are bound to be repeated due to huge number of characters in one array`; } else { array = []; while (collection.length > 0) { let max = collection[0].length; for (let i = 1; i < max;) { if (collection.length == 1) { if(collection[0][0]) array.push(collection[0][0]); break; } else if (collection[i].length > 0) { array.push(collection[0][0]); array.push(collection[i][0]); temp1 = collection[0].split(''); temp1.shift(); collection[0] = temp1.join(''); temp = collection[i].split(''); temp.shift(); collection[i] = temp.join(''); } else { collection.splice(i, 1); collection.sort(function (a, b) { // ASC -> a.length - b.length // DESC -> b.length - a.length return b.length - a.length; }); } } collection.splice(0, 1); collection.sort(function (a, b) { // ASC -> a.length - b.length // DESC -> b.length - a.length return b.length - a.length; }); } array=array.join(''); console.log('ANS:', array) return array } } shuffle(collection);被执行。

(3)当REST1的ResponseStatus为REST1时,执行200

上述(3)REST2被重复执行

通过REST2的日志同时执行两次。

示例代码如下。 我正在执行RESTService的多步执行,但是代码内容是否存在任何问题?

Observable.subscribe

如果有关于Angular和案例的错误信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

Live Example

必须使用紧急方式来链接请求,请尝试以下反应方式:

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

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

request.subscribe(console.log);