在 switchMap 中调度 ngxs 操作忽略 return 值

dispatch ngxs action in switchMap ignoring the return value

一定有解决这个问题的标准方法,但我还没有找到任何东西。我可能没有正确表述我的搜索。

我有一个搜索输入字段,作为一种好的做法,我使用 switchmap 运算符在用户继续输入时取消以前的 http 请求。

我是根据 ngxs 文档中的示例得出的:

this.actions$
  .pipe(
    ofActionDispatched(SomeAction),
    debounceTime(2000),
    distinctUntilChanged(),
    untilDestroyed(this),
    switchMap(() => {
      return this.store.dispatch(new SomeOtherAction());
    })
  ).subscribe(() => {
});

SomeAction 每次用户在输入字段中输入内容并保存在商店中时都会调度(这就是 SomeOtherAction 没有构造函数参数的原因)。

没有这个空的订阅块,有没有更好的方法来做到这一点?这看起来像一个反模式。

您可以考虑的另一种方法是仅在 debounce

之后调度更改状态中的 searchText 的操作

在搜索输入表单控件上使用 valueChanges Observable,您可以通过 debounce/distinct/filter 或任何适合您目的的组合,然后调用 store.dispatch 以修改状态。

然后你只需修改状态所需的最少次数而不是每次按键,也可以从那里调用 HTTP 请求(我认为你不需要组件中的动作流订阅) .

Doco for Angular 表格 valueChanges here