【问题标题】:Redux saga: What is the difference between using yield call() and async/await?Redux 传奇:使用 yield call() 和 async/await 有什么区别?
【发布时间】:2019-05-19 19:06:35
【问题描述】:

我正在使用 Redux Saga 模板,它使用包含 yield call() 实例的生成器函数。基本上是这样的:

function *a(){
  yield call(<some function>);
}

yield takeLatest(SOME_ACTION, a)

我的问题如下:

1) 我是否正确使用的原因

function *a(){
  yield call(<some function>());
}

而不是

function a(){
  <some function>()
}

是不是第一个,生成器函数会等到yield call 行返回后再继续,而在第二个中,() 将被异步调用?

2) 如果我对 (1) ^^ 的看法是正确的,那么在 a 内调用 some_function 似乎与以下内容相同:

async a() {
  await some_function();
}

这对吗?

3) 如果我对 (2) ^^ 的看法是正确的,那么使用生成器函数而不是 async/await 的唯一原因似乎是可以从 yield takeLatest 等调用生成器函数。这是正确的吗?还是背后有什么其他原因?

谢谢!

【问题讨论】:

    标签: reactjs react-native redux redux-saga saga


    【解决方案1】:

    'yield' 将等到生成器展开到此 'yield' 迭代。

    saga generator (worker) 的想法是使用效果创建器(put、call 等)生成特殊功能(所谓的“效果”),而不仅仅是做某事。这允许编排函数调用。

    另见Redux Saga async/await pattern

    【讨论】:

      【解决方案2】:

      生成器函数更灵活,可以根据使用次数生成不同的东西。我想到了某种分页。下面是一些使用async/await 实现起来比较棘手的生成器函数示例:

      https://github.com/getify/You-Dont-Know-JS/blob/master/async%20%26%20performance/ch4.md#multiple-iterators

      【讨论】:

      • 链接失效
      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 2012-03-20
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多