首页 > 解决方案 > 多调度或嵌套调度

问题描述

我的商店有两个字段:

当用户购买商品时,我调用 apiService并且如果服务器的响应允许您添加商品(服务器将检查用户是否有足够的钱),我可以在我的商店中进行两项更改

  1. 将新项目推送到数组
  2. 减少金钱

我对调度动作的良好做法感到困惑...... 哪种方式最好?

  1. 多调度 - 调度AddItem动作和DecreaseMoney动作:
store.dispatch([new AddItem(), new DecreaseMoney()]);
  1. 在 first 成功时订阅AddItemaction 和 dispatch action:DecreaseMoney
this.actions$.pipe(ofActionSuccessful(AddItem)).subscribe(() => {store.dispatch(new DecreaseMoney()});
  1. DecreaseMoney动作内部的调度AddItem动作:
@Action(AddItemAction)
  AddItem({ getState, setState }: StateContext<any>) {
    const state = getState();
    return this.http.post(`${apiUrl}/buy`, {}).pipe(
      tap(newItem => {
        setState({...state, items: [...state.items, newItem]});
        dispatch(new DecreaseMoney()); // <---
      })
    );
  }

标签: actionngxs

解决方案


如果动作不会改变相同的状态,我建议使用多调度,因为它不那么冗长。如果您依赖第一个异步操作的返回响应,我认为您的嵌套设置是合乎逻辑的。但是,您似乎没有向 DecreaseMoney() 传递任何内容......所以第一个选项似乎最好。

编辑:

我会选择选项 2,因为这可能是一个特定的场景。如果您将所有逻辑都放在您的操作中,您就是将 DecreaseMoney() 耦合到 AddItem()。通过将业务逻辑放在组件/容器中,您可以创建可重用的操作。这就是我个人会做的。


推荐阅读