this.activatedRoute.queryParamMap
.pipe(
// activatedRoute.queryParamMap emits null values first. So let's avoid it
filter((paramMap) => paramMap && paramMap.keys.length > 0),
// unsubscribe immediately if some params are found
take(1),
// If the params are really empty, filter will never pass. So let's unsubscribe after sometime
takeUntil(timer(1000)),
delay(1),
combineLatestWith(this.sortableColumns$),
)
.subscribe(([paramMap, sortableColumns]) => {
console.log("paramMap")
this.setTableOptionsFromUrl(paramMap, sortableColumns);
});
我有上面的代码。
我的问题是,
take(1)
在第一次发射后完成。
由于您之前有一个过滤器,因此它仅在 fiter 之后完成是合乎逻辑的。它无法知道之前会发生什么。在它之前你可能有 100 个操作员。
当通知者告诉他做什么时,takeUntil()
完成,在本例中是 1000 毫秒后。他不在乎前后发生什么,它只是在 1000 毫秒后完成。
如果你仔细想想,这是合乎逻辑的。这些操作员或多或少独立于前后发生的事情。