【问题标题】:Flux architecture - how to know in controller when async event from action is completedFlux 架构 - 如何在控制器中知道来自动作的异步事件何时完成
【发布时间】:2016-01-12 20:42:25
【问题描述】:

我正在学习 flux 架构。我正在尝试添加新用户。当用户点击 UI 上的save 按钮时,在我的控制器中我调用动作创建者的createUser 函数来发起异步请求:

    addNewUser: function () {
        HdfsUsersActions.createUser($scope.newUser);
    }

动作创建函数:

    createUser: function (user) {
        return restService.createHdfsUser(user).then(function (data) {
            flux.dispatch('platform-manager-ADD_USER', data);
        });
    }

然后我需要知道异步请求何时结束及其状态以在 html 中隐藏用户添加 UI 表单。这里的正确方法是什么?

我可以这样做:

HdfsUsersActions.createUser($scope.newUser).then(function() {
   //hide user add form on UI
});

但这似乎不是正确的方法,因为在flux 架构下,控制器获取数据的唯一方式似乎是来自store。在这里,使用then 似乎打破了该规则,因为数据来自action creator

【问题讨论】:

  • 因为问题不是关于任何特定框架,而是关于通量的架构范式
  • “但这似乎不是正确的方法。”...如果您调用一个返回承诺的函数,那么在async/await 登陆之前这确实是正确的方法。是什么让您认为这是不正确的?
  • @spender,因为在flux 架构下,控制器获取数据的唯一方式似乎是来自store。在这里,使用then 似乎打破了该规则,因为数据来自action creator
  • 请更新主要问题(如何在异步事件完成时从控制器知道),因为我非常怀疑这是您想知道的。你更有可能想知道。在 javascript angularjs 中,你怎么知道一个任务已经完成。这与异步与非异步无关。它与如何处理来自 angularjs 的响应以及它们何时完成有关。
  • @Maximus 对不起,我真的!!!不是!试图成为一个 $ss,但它仍然是一个小姐领先的标题。 “Flux 架构 - 如何从控制器知道动作的异步事件何时完成”应该类似于“Flux 架构 - 如何知道请求何时完成/完成”。也可能是“Angularjs - 如何知道请求何时完成/完成”。但我需要谷歌通量以确保因此我不会自己更改标题。但我知道当前的术语并不能准确地代表您想知道的内容。

标签: javascript reactjs reactjs-flux flux


【解决方案1】:

当您收到来自异步调用的应答时,您将调度事件platform-manager-ADD_USER:

flux.dispatch('platform-manager-ADD_USER', data);

然后,您应该在 store 中监听此事件,并使用收到的data 更新自身。然后所有侦听此更改的组件将收到更新并在需要时重新呈现自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2014-03-27
    • 2015-10-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多