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

gke*_*ley 6 saga reactjs react-native redux redux-saga

我正在使用 Redux Saga 模板,它使用包含yield call(). 基本上它看起来像这样:

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

yield takeLatest(SOME_ACTION, a)
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

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

function *a(){
  yield call(<some function>());
}
Run Code Online (Sandbox Code Playgroud)

代替

function a(){
  <some function>()
}
Run Code Online (Sandbox Code Playgroud)

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

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

async a() {
  await some_function();
}
Run Code Online (Sandbox Code Playgroud)

这样对吗?

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

谢谢!

小智 -1

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

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