首页 文章

rxjs merge:您提供了'undefined',其中包含一个流

提问于
浏览
0

当我尝试合并observbles时,我收到错误 You provided 'undefined' where a stream was expected. .

我在这里创建我的刷新observable:

refresh$: Observable<Funnel[]>;

然后我有一个计时器......

TimerObservable.create(0, (this.storageService.refRate * 1000))
    .takeWhile(() => this.interval)
    .subscribe(() => {
        this.refresh$ = this.funnelService.getStoryFunnels({}).map(response => [...response]);
    });

然后当我尝试合并observable时,会产生错误:

this.funnels$ = this.funnelService.getStoryFunnels({}).pipe(
    merge(this.refresh$, funnelCreation$.pipe(
            filter(funnel => !!funnel),
            map(funnel => [funnel])
        )
    )
);

根据舒适的答案更新:

this.refresh$ = TimerObservable.create(0, (this.storageService.refRate * 500))
    .takeWhile(() => this.interval)
    .switchMap(() =>  this.funnelService.getStoryFunnels({}).map(response => [...response]));

然后:

this.funnels$ = this.funnelService.getStoryFunnels({}).pipe(
        merge(this.refresh$, funnelCreation$.pipe(
                filter(funnel => !!funnel),
                map(funnel => [funnel])
            )
        )
    );

1 回答

  • 2

    这是因为 this.funnels$ isn't an observable yet 在声明它时(不是用任何值启动),因为它只会在执行定时器后才被赋值 . 然而,声明代码几乎立即执行(同步) . 这就是为什么你得到 undefined .

    你应该做的是你可以使用 switchMap 并将你的 this.refresh$ 指定给它:

    this.refresh$ = TimerObservable.create(0, (this.storageService.refRate * 1000))
        .takeWhile(() => this.interval)
        .switchMap(() =>  this.funnelService.getStoryFunnels({}).map(response => [...response]));
    

相关问题