在 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
一定有解决这个问题的标准方法,但我还没有找到任何东西。我可能没有正确表述我的搜索。
我有一个搜索输入字段,作为一种好的做法,我使用 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