当前位置: 首页>>代码示例>>TypeScript>>正文


TypeScript Observable.flatMap方法代码示例

本文整理汇总了TypeScript中rx.Observable.flatMap方法的典型用法代码示例。如果您正苦于以下问题:TypeScript Observable.flatMap方法的具体用法?TypeScript Observable.flatMap怎么用?TypeScript Observable.flatMap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在rx.Observable的用法示例。


在下文中一共展示了Observable.flatMap方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。

示例1: matchEvents

      return Observable.create((observer: Observer<Object>) => {
        const match = events ? matchEvents(events) : null;
        const bag = new CompositeDisposable();
        const observerables: Observable<any>[] = values(tasks);

        let s1: Observable<any>;
        let connectables: ConnectableObservable<any>[];
        let readyActionObservables: Observable<{type: 'ready'}>[];

        if (observerables.length) {
          connectables = observerables.map((s) => s.publish());
          readyActionObservables =
            connectables.map((s) => s.filter(propEq('type', 'ready')));

          const allParentsReady: Observable<{type: 'ready'}[]> =
            Observable.combineLatest.apply(null, readyActionObservables).take(1);

          s1 = allParentsReady;
        } else {
          s1 = Observable.just(null);
        }

        if (preStart) {
          s1 = s1.flatMap(() => spawn(preStart));

          if (match) {
            s1 = s1.doOnNext((val: string) => {
              const action = match(val);
              if (action) {
                observer.onNext(action);
              }
            });
          }
        }

        let input: EventEmitter;
        let output: EventEmitter;

        bag.add(s1.subscribeOnCompleted(() => {
          if (start) {
            let s2: Observable<string>;

            if (readyActionObservables) {
              s2 = Observable
                .merge
                .apply(null, readyActionObservables)
                .startWith(null)
                .flatMapLatest(() => spawn(start));
            } else {
              s2 = spawn(start);
            }

            let d: Disposable;

            if (match) {
              d = s2.subscribeOnNext((val) => {
                const action = match(val);
                if (action) {
                  observer.onNext(action);
                }
              });
            } else {
              d = s2.subscribe(() => {});
            }

            bag.add(d);
          } else { // "process"
            input = new EventEmitter();
            output = new EventEmitter();

            output.on('action', (obj: Object) => {
              observer.onNext(obj);
            });

            process(input, output);

            const d = Observable.merge.apply(null, connectables)
              .subscribeOnNext((action: Object) => input.emit('action', action));

            bag.add(d);
          }
        }));

        if (connectables) {
          connectables.forEach((s) => bag.add(s.connect()));
        }

        return () => {
          bag.dispose();
          if (input) {
            input.removeAllListeners();
          }
          if (output) {
            output.removeAllListeners();
          }
        };
      });
开发者ID:d6u,项目名称:dev-runner,代码行数:97,代码来源:utils.ts


注:本文中的rx.Observable.flatMap方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。