Redux传奇:使用yield call()和async / await有什么区别?

时间:2019-05-19 19:06:35

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

我正在使用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)^^是正确的,则在some_function中调用a似乎与以下内容相同:

async a() {
  await some_function();
}

这正确吗?

3)如果我对(2)^^是正确的,那么似乎使用生成器函数而不是异步/等待的唯一原因是可以从yield takeLatest等调用生成器函数。正确?还是背后还有其他合理性?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

传奇生成器(工作者)的想法是使用效果创建者(输入,调用等)生成特殊功能(所谓的“效果”),而不仅仅是做某事。这样可以编排函数调用。

另请参阅Redux Saga async/await pattern