【发布时间】:2017-11-19 19:51:12
【问题描述】:
以下语法是什么意思?我不明白在收益后使用*。我是 generators、redux 和 sagas 的新手,所以我希望能帮助我理解 *、takeEvery() 和 return function *(action) { 的语法的作用:
var MIDDLEWARES = []
function builder( ) {
const LOAD_DATA = "POI_LOADER/LOAD_POIS"
MIDDLEWARES.push( function *sagaFunction() {
yield *takeEvery( LOAD_DATA, loadData( statusField) )
} )
}
const loadData = (statusField) => {
return function *(action) {
console.log("action.venueId = " + action.venueId)
}
}
这里有几个问题:
-
yield *takeEvery()中的*是什么意思?好像是Delegated yield (yield star, yield *) in generator functions回答的。 - 既然 builder() 函数包含
yield *语句,为什么它不需要*来使其成为生成器?那是因为yield *takeEvery()被包裹在生成器函数sagaFunction()中吗? -
takeEvery()函数有什么作用,特别是考虑到它前面有一个*?我认为takeEvery()。基于其documentation,我认为它将loadData()应用于LOAD_DATA中的所有内容。但是如果LOAD_DATA不是一个数组,那么这段代码中是否需要takeEvery()? - 为什么声明
return function *(action)似乎没有函数名称?是否使用输入参数action声明生成器并将该生成器分配给称为loadData的const? - Saga 库是否在此代码中创建的生成器上调用
next()?
【问题讨论】:
-
这样合法吗?看起来很奇怪。
*是关键字的一部分,即它是function*和yield*。我不知道允许空格,这太疯狂了。
标签: javascript ecmascript-6 generator redux-saga