首页 > 解决方案 > Rxjs 类似 zip 的运算符,仅在 observable 以特定顺序触发时返回

问题描述

假设我有两个 Observable A 和 B,我想将它们组合起来以产生这种行为:订阅组合仅在 A 被触发且 B 已经被触发时才返回。它与 zip 不同,因为如果 A 已经被解雇然后 B 被解雇,我不希望有任何回报。换句话说:忽略A直到B触发然后返回下一个A,然后忽略任何其他A直到B触发......等等

标签: rxjsrxjs6rxjs-pipeable-operators

解决方案


我相信你需要withLatestFrom运营商:

import { withLatestFrom, map } from 'rxjs/operators';
import { interval } from 'rxjs';

const obsA = interval(2000);
const obsB = interval(1000);
const resultingObs = obsB.pipe(
  withLatestFrom(obsA),
  map(([bValue, aValue]) => {
    return aValue
  })
);

// This should emit values from obsA only when obsB has been fired.
const subscribe = resultingObs .subscribe(val => console.log(val));

推荐阅读