【问题标题】:Mobx State Tree Flow. How to Know when it's done?Mobx 状态树流。如何知道何时完成?
【发布时间】:2018-07-12 19:07:05
【问题描述】:

我正在将 mobx 状态树和 mobx 用于 UI Stuff。

现在,当我将某些内容保存到数据库时,请求完成后我想更新 ui(即我的 mobx 状态)。

我需要知道流程何时结束。

  myFlow: flow(function* () {
          // do stuff here.
    }),

现在我看到返回了一个promise,所以我想只是这样做

myFlow.then() 

这行得通,但我想知道这是财产方式还是有其他方式可以做到这一点(异步/等待?或流程具有的一些内部事物?)

【问题讨论】:

    标签: javascript reactjs mobx mobx-state-tree


    【解决方案1】:

    流程返回一个承诺,因此任何承诺等待机制都可以工作:.thenawaityield 在另一个 flow 中。如果要渲染流的状态,可以看一下 mobx-utils 包的mobxUtils.fromPromise(promise).case(....)

    【讨论】:

    • 渲染流的状态是什么意思?另外,如果我正在使用 Axios 并产生它。我应该返回它的响应并被“流”包裹在一个承诺中?
    • 流本身就是一个promise,所以如果你想在promise转换期间渲染它的状态,上面的util就派上用场了。
    • 你可以产生任何返回承诺的东西,流程会等待它。
    • 但我必须等待实际的流程方法吗?我想在 myFlow 被调用并完成后做一些事情。我想捕获错误并更新 UI,或者捕获成功并更新 UI,但我想在流程调用之外进行。
    • 任何流方法都会返回一个承诺。所以你可以等待它,然后它等等:myObject.myFlow().then(() => { console.log('done!') }
    【解决方案2】:

    在生成器内部,您可以在最后调用其他操作。

    在下面的示例中,我调用thisIsWhatYouNeed 函数。该函数将在生成器结束时调用。

    myFlow: flow(function* () {        
      try {
        const response = yield fetch('your URL here');
        const data = yield response.json()
    
        // here you can call another action
        self.thisIsWhatYouNeed(data);
    
      } catch (error) {
        console.log('error happens');
      }
    })
    
    thisIsWhatYouNeed(data) {
      // here you have your data and know that flow is finished
      console.log('generator already finished');
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-19
      • 2011-11-23
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多