rxjs在combineLatest中调用combineLatest

时间:2017-02-08 11:22:38

标签: angular rxjs rxjs5 ngrx

我遇到rxjscombineLatest方法的问题。 我试图在combineLatest中调用combineLatest但它不起作用,尽管它返回Observable对象。请帮忙解决问题。 console.log永远不会被称为

实际上,不同文件中的所有观察者,所以我无法将this.search$移动到this.services$

this.search$ = store.select('search');

this.services$ = Observable.combineLatest(
    store.select('currentRegions'),
    store.select('services'),
    (regions, services) => {
        // some filter here
        return services;
    }
);

this.autocomplete$ = Observable.combineLatest(
    this.search$,
    this.services$,
    (search, services) => {
        console.log('show me, please');
        return '';
    }
);

已解决:没有任何订阅者它不起作用,所以我必须订阅它

2 个答案:

答案 0 :(得分:2)

combineLatest()运算符在其所有源Observable发出至少一个值时发出一个值。

因此,如果console.log(...)从未打印,则表示this.search$this.services$从不发出任何内容。换句话说,这意味着store.select('currentRegions')store.select('services')store.select('search')中的任何一个都不会发出任何值。

请注意,您可以使用startWith()(即使使用startWith(null))。

这有效:https://jsbin.com/gecede/2/edit?js,console

这不起作用:https://jsbin.com/livafar/2/edit?js,console

答案 1 :(得分:1)

RxJS CombineLatest是一种AngularJS $ q.all

import 'rxjs/add/observable/combineLatest';


Observable
      .combineLatest(this.store.select('currentRegions'), this.store.select('services')
      .do(console.log)
      .subscribe();