哪个合并运算符用于侦听单个源而不是第二个流源

时间:2017-01-27 00:16:50

标签: angular rxjs ngrx

所以我知道这个问题可能看似简单,但事情并非如此简单。 我尝试过的所有操作符,例如combineLatestconcatswitchMap都会导致差异问题。

所以这是挑战:

var campaignSelected$ = this.store.select(store => store.appDb.uiState.campaign.campaignSelected)
var campaignsList$ = this.store.select(store => store.msDatabase.sdk.table_campaigns);
return campaignSelected$.switchMap(i_campaignSelected => campaignsList$, (campaignId, campaigns) => {
  return 'foo';
})

所以我有两个流,我只希望在第一个流campaignSelected$发出时收到通知,此时我想切换并从我的第二个campaignsList$流中获取数据,所以一切都很棒。

但是,如果稍后campaignsList$因为商店已更改而再次发出,我将再次收到通知,我不希望收到通知,因为我只关心{{{ 1}}。

请记住,我的第二个流不会在第一个流的同时发生变化,因此concat等运算符将无效。

现在我已经尝试campaignSelected$和diff合并opertors并且它们都不够,即:我的第一个流发出时只需要通知,而第二个流发出时不需要通知,但我们仍然需要抓取数据来自第二个流,但是当且仅当第一个流发出时。

1 个答案:

答案 0 :(得分:1)

如果您希望在第一个流发出时收到通知,而不是在第二个流发出时收到通知,则withLatestFrom运算符就是您要查找的内容:

class DebugTest extends PHPUnit_Framework_TestCase
{
    public function test()
    {
        ob_start();

        $d = new Debug;

        $d->log('foo');

        $this->assertEquals(
            'foo',
            ob_get_clean()
        );
    }
}