使用 takeUntil 取消可观察值不起作用

SBK*_*per 7 rxjs angular

我有一个自动完成 HTTP 调用和一个执行搜索 HTTP 调用...我需要自动完成调用在触发执行操作时中止。我现在正在做的是使用这样的主题:

private onExecute$ = new Subject();
Run Code Online (Sandbox Code Playgroud)

在我的自动完成方法中:

executeAutoComplete(e) {
  this.myService.searchAutoComplete(e.criteria)
  .pipe(
   takeUntil(this.onDestroy$),
   takeUntil(this.onExecute$),
   map( 
  // continue with more code
Run Code Online (Sandbox Code Playgroud)

然后在我的执行方法中我发出信号:

executeSearch(e) {
console.log('triggering onExecute signal');
this.onExecute$.next();
  // other code
}
Run Code Online (Sandbox Code Playgroud)

所以在我的控制台中,我看到“触发 onExecute 信号”,但自动完成结果在完整搜索开始执行后返回,我认为一旦我发出信号,takeUntil 就会中止链?这是行不通的。

因此,本质上我试图阻止的行为是,当用户触发搜索时,自动完成结果不应返回并打开下拉列表,因为它不再相关。

我在这里缺少什么?

编辑 -

订单实际上是问题所在,因为总是在自动完成之前调用执行的去抖时间,订单无论如何都可能是不可预测的。没有意识到如果 Observable 链尚未激活, onExecute.next() 将会丢失。

我确实也设置了一个 searchLoading 变量,我该如何使用它?

我试过:

takeUntil(Observable.of(this.searchLoading))
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为它总是正确的!如何将 takeUntil 与动态评估的布尔值一起使用?

编辑2-

使用 takeWhile 来代替:

takeWhile(() => !this.searchLoading))
Run Code Online (Sandbox Code Playgroud)

ehr*_*ona 1

难道是executeSearch之前叫的executeAutoComplete?如果onExecute$在构建可观察链之前已经发出了一个值,则不会停止搜索的执行。

顺便说一句:在我看来,unsubscribe当您运行搜索时调用订阅会更简单。