尝试在动作中使用异步代码的最佳做法

何塞·安德烈斯·蒙特斯·埃斯皮诺萨

我正在开发一个带有Expo Native的React Native项目,现在我正试图从本地数据库内的列表中删除一个项目。问题出在我发送它的动作中。这是我的代码。

  export const eliminatePlace = (placeId) => {
    console.log(`Inside the action with placeID ${placeId}`);
    return async dispatch => {
      console.log('returned');
      try {
        const dbResult = await deletePlace(placeId);
        console.log(dbResult);
        dispatch({
          type: DELETE_PLACE,
          id: placeId
        });
      } catch (err) {
        throw err;
        console.log(err);
      }
    };
  }

不知何故,返回中的console.log没有启动,我的工作是这样的:

export const eliminatePlace =  async (placeId, dispatch) => {

  try {
    console.log(`Trying to eliminate place with ID ${placeId}`);
    const dbResult = await deletePlace(placeId);
    console.log(dbResult);
    dispatch({type: DELETE_PLACE, id: placeId});
  } catch (err) {
    throw err;
    console.log(err);
  }

};

然后它确实起作用了,但这不是最佳实践,关于为什么正确方法无效的任何想法?这是我的github存储库的链接,您可以在其中下载该项目:https : //github.com/josmontes/rn-places如果有人需要查看代码的其他位置,请询问,我没有添加其他任何内容,因此它不会膨胀问题,并且因为问题在此函数内部。

乔茨赫达

您不应该在动作创建者内部调用异步函数。您可以在此处详细了解原因相反,您应该使用异步操作。即使您没有进行API调用,也可以将流程表示为request-success-failure。基本上,调度“请求”操作,并作为副作用调用异步函数。解决后,您将根据结果分派“成功”或“失败”操作。然后,您可以将来自数据库的结果放入“成功”操作的有效负载中。你可以在这里阅读更多有关它的内容

我相信您提供的第二个示例有效,因为这基本上只是“成功”操作。仅在异步函数解析后才调度常规操作,而在第一个示例中,操作函数本身就是异步的,redux不喜欢这种操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异步javascript最佳做法

来自分类Dev

这是在iOS中使用图片库的最佳做法

来自分类Dev

使用ServerCertificateValidationCallback的最佳做法

来自分类Dev

最佳做法是使用$?猛击?

来自分类Dev

如果我在动作定义中使用异步任务,那么该动作应该与异步相关吗?

来自分类Dev

使用导航抽屉的最佳做法

来自分类Dev

使用JavaScript原型-最佳做法

来自分类Dev

设置退出状态代码的最佳做法

来自分类Dev

避免重复代码的最佳pythonic做法?

来自分类Dev

避免重复代码的最佳pythonic做法?

来自分类Dev

在Django中使用简单异步队列的最佳方法?

来自分类Dev

尝试在Javascript中使用Laravel Asset()Helper异步显示图像

来自分类Dev

直接在渲染或状态中使用 const 的最佳做法是什么?

来自分类Dev

在Clojure中使用reduce / map时尝试跟踪迭代是否是错误的做法?

来自分类Dev

在常规python脚本中使用龙卷风异步代码

来自分类Dev

在多线程代码中使用F#事件和异步

来自分类Dev

在AsyncCallback中使用动作

来自分类Dev

两次尝试/除外-bs4最佳做法

来自分类Dev

尝试在Perform方法中销毁对象时的Sidekiq最佳做法

来自分类Dev

我如何在vuex中的动作对象中使用异步和等待?

来自分类Dev

错误:等待表达式只能在异步函数中使用。尝试使用“异步”或“异步*”标记功能主体

来自分类Dev

未使用功能参数的最佳做法

来自分类Dev

使用CSS定位html元素的最佳做法

来自分类Dev

使用CSS定位html元素的最佳做法

来自分类Dev

使用HyperLink传递数据时的最佳做法?

来自分类Dev

最佳做法-使用Symfony 2删除链接

来自分类Dev

与基本组件配合使用-最佳做法

来自分类Dev

在C ++代码中使用C样式的注释是一种不好的做法吗?

来自分类Dev

在异步功能中使用异步?

Related 相关文章

  1. 1

    异步javascript最佳做法

  2. 2

    这是在iOS中使用图片库的最佳做法

  3. 3

    使用ServerCertificateValidationCallback的最佳做法

  4. 4

    最佳做法是使用$?猛击?

  5. 5

    如果我在动作定义中使用异步任务,那么该动作应该与异步相关吗?

  6. 6

    使用导航抽屉的最佳做法

  7. 7

    使用JavaScript原型-最佳做法

  8. 8

    设置退出状态代码的最佳做法

  9. 9

    避免重复代码的最佳pythonic做法?

  10. 10

    避免重复代码的最佳pythonic做法?

  11. 11

    在Django中使用简单异步队列的最佳方法?

  12. 12

    尝试在Javascript中使用Laravel Asset()Helper异步显示图像

  13. 13

    直接在渲染或状态中使用 const 的最佳做法是什么?

  14. 14

    在Clojure中使用reduce / map时尝试跟踪迭代是否是错误的做法?

  15. 15

    在常规python脚本中使用龙卷风异步代码

  16. 16

    在多线程代码中使用F#事件和异步

  17. 17

    在AsyncCallback中使用动作

  18. 18

    两次尝试/除外-bs4最佳做法

  19. 19

    尝试在Perform方法中销毁对象时的Sidekiq最佳做法

  20. 20

    我如何在vuex中的动作对象中使用异步和等待?

  21. 21

    错误:等待表达式只能在异步函数中使用。尝试使用“异步”或“异步*”标记功能主体

  22. 22

    未使用功能参数的最佳做法

  23. 23

    使用CSS定位html元素的最佳做法

  24. 24

    使用CSS定位html元素的最佳做法

  25. 25

    使用HyperLink传递数据时的最佳做法?

  26. 26

    最佳做法-使用Symfony 2删除链接

  27. 27

    与基本组件配合使用-最佳做法

  28. 28

    在C ++代码中使用C样式的注释是一种不好的做法吗?

  29. 29

    在异步功能中使用异步?

热门标签

归档