使用参数链接订阅多个observable

我想一个接一个订阅两个 observables。顺序很重要,必须遵守。第一个 observable 返回一个itemId必须传递给第二个订阅的结果。目前,我使用嵌套订阅,这不是很好。实现这一点的最干净的方法是什么?

// 1
this.widget$
  .subscribe((widget) => {
    const itemId: number = widget.data[0].itemId;

    // 2
    this.store
      .select(DeviceHistoryStore.getItemHistoryEntries(this.deviceId, itemId))
      .subscribe((deviceHistory) => {
        const name = widget.name; 
        // Run code
    });
});

回答

只需使用SwitchMap。

this.widget$.pipe(
    switchMap(widget => 
        this.store
            .select(DeviceHistoryStore.getItemHistoryEntries(
                this.deviceId, 
                widget.data[0].itemId
            ))
    )
).subscribe(deviceHistory => { /* ... */ )

编辑:

如果要widget在订阅回调中访问:

this.widget$.pipe(
    switchMap(widget => 
        combineLatest([
            of(widget),
            this.store
                .select(DeviceHistoryStore.getItemHistoryEntries(
                    this.deviceId, 
                    widget.data[0].itemId
                ))
        ])        
    )
).subscribe(([widget, deviceHistory]) => { /* ... */ )


以上是使用参数链接订阅多个observable的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>