一段时间后,我会定期致电服务。我得到两个数字作为服务响应的结果,我想比较那些数字,如果它们相等,我想结束服务呼叫。那我应该如何使用takeUntil()方法?
我尝试在takeUntil()中使用this.ngXUnsubscribe,但在一段时间内没有结束服务调用。 ngXUnsubscribe的定义如下:
localProfile
protected ngXUnsubscribe: Subject<void> = new Subject<void>();
当这两个数字相等时,我想停止执行,直到那时我应该继续调用该服务。
我得到的JSON数据是
const source = timer(1000,60000);
source.subscribe(()=> {
this._helper.runStatus(id)
.pipe(first(),takeUntil())
.subscribe(response => {
let xyz = response && response.runScenariosDTO ? response.runScenariosDTO : [];
this.passDataToParent(xyz);
this.progressBarData = this.ScenariosBasedOnTypeDTO.map(scenario => {
let pBar = response && response.runScenariosDTO ? response.runScenariosDTO.find(barData => barData.scenarioId ? barData.scenarioId === scenario.scenarioId : undefined) : undefined;
this.showStatusAfterLoad = 1;
return this.prepareProgressBarData(scenario, pBar);
});
});
});
因此,在runScenariosDTO数组中,我想添加所有totalExecuted和totalDataset,然后将它们进行比较。
答案 0 :(得分:0)
您应该利用takeWhile
运算符(examples)。
timer(1000, 60000).pipe(
switchMap(() => this._helper.runStatus(id)),
takeWhile(response => {
const totals = response.runScenariosDTO.map(v => ({
dataset: v.totalDataset,
executed: v.totalExecuted
}))
.reduce((sums, v) => ({
dataset: sums.dataset + v.dataset,
executed: sums.executed + v.executed
}), { dataset: 0, executed: 0 });
return totals.dataset !== totals.executed;
})
).subscribe(...);