Dva: effect 是否支持 async/await 写法?

Created on 8 Oct 2018  ·  9Comments  ·  Source: dvajs/dva

如题

Most helpful comment

Generator强大的,我只想吐槽goto更强大,想跳哪里就哪里

All 9 comments

不支持,dva 基于 redux-saga,redux-saga 使用 Generator 使 effect 可测试,详细可以看一下这条答复

https://github.com/redux-saga/redux-saga/issues/987#issuecomment-301039792

我刚看了你发我的那条issue 说白了 redux-saga的作者太懒 不愿意改 哈哈

我也有次疑问,翻了下dva源码,effects对象中的函数是提供给外部执行,是需要按照其规范定义的,外部需要定义为Generator函数,而我们使用者不用关心外部执行,它会执行next(),因此代码还是很清新的。

我刚看了你发我的那条issue 说白了 redux-saga的作者太懒 不愿意改 哈哈

搞笑,async,await 对异步的控制远远没有generator函数强大

不支持,dva 基于 redux-saga,redux-saga 使用 Generator 使 effect 可测试,详细可以看一下这条答复

redux-saga/redux-saga#987 (comment)

这个issues没有讲为啥generator 是可测试的啊。@xiaosongxiaosong

用 async,await 就不能测试了么?(问题好久了。是不是没人讨论了)

@951565664

async,await 对异步的控制远远没有generator函数强大

BengBu-YueZhang 已经说到了这个问题的本质, 我对与 generator 的理解也不是很透彻,说一下自己一点浅薄的理解:

  1. generator 函数 被调用时,返回了一个 遍历器对象 给调用者,这个 遍历器对象 除了能够让 generator 恢复执行之外,还能在恢复时 指定 yield 表达式的返回值
  2. async 函数 是是 Generator 函数的语法糖,内置了执行器,调用之后会自动执行并输出最终结构,调用者无法控制 async 函数的暂停恢复,也无法向 async 函数 内部注入值

ECMAScript 6 入门 generator 一章 中有一下两段说明,对理解这个问题比较有用

yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。

Generator 函数从暂停状态到恢复运行,它的上下文状态(context)是不变的。通过next方法的参数,就有办法在 Generator 函数开始运行之后,继续向函数体内部注入值。也就是说,可以在 Generator 函数运行的不同阶段,从外部向内部注入不同的值,从而调整函数行为。

Generator强大的,我只想吐槽goto更强大,想跳哪里就哪里

我刚看了你发我的那条issue 说白了 redux-saga的作者太懒 不愿意改 哈哈

搞笑,async,await 对异步的控制远远没有generator函数强大

好像在说,JS语言远远没有C语言强大

Was this page helpful?
0 / 5 - 0 ratings