Javascript Redux传奇中的yield*委托运算符
在《圣经》中,我们被告知要写一个类似这样的观察者传奇:Javascript Redux传奇中的yield*委托运算符,javascript,generator,redux,redux-saga,Javascript,Generator,Redux,Redux Saga,在《圣经》中,我们被告知要写一个类似这样的观察者传奇: export function* watchIncrementAsync() { yield* takeEvery('INCREMENT_ASYNC', incrementAsync) } 为什么我们在第2行使用yield*委托运算符,而不仅仅是yield运算符?它们在这里不是都做同样的事情吗?正如LUH3417所说,takeEver是一个生成器,所以在这个例子中,您可以让(委托给它)。从文档中: function* takeEve
export function* watchIncrementAsync() {
yield* takeEvery('INCREMENT_ASYNC', incrementAsync)
}
为什么我们在第2行使用
yield*
委托运算符,而不仅仅是yield
运算符?它们在这里不是都做同样的事情吗?正如LUH3417所说,takeEver是一个生成器,所以在这个例子中,您可以让(委托给它)。从文档中:
function* takeEvery(pattern, saga, ...args) {
while (true) {
const action = yield take(pattern)
yield fork(saga, ...args.concat(action))
}
}
我猜这是关于控制流的。如果您的迭代器不想生成takeEvery之外的任何内容,那么我看不出您需要完全生成控制流的原因。如果您的生成器需要将控制权传递给另一个生成器,然后返回,那么我看到将控制权传递给。。。但在您的示例中,我看不出您需要委托给takeEvery的代码原因。如果我错了,请让我知道 正如LUH3417所说,takeEver是一个生成器,因此在本例中,您将(委托给它)。从文档中:
function* takeEvery(pattern, saga, ...args) {
while (true) {
const action = yield take(pattern)
yield fork(saga, ...args.concat(action))
}
}
我猜这是关于控制流的。如果您的迭代器不想生成takeEvery之外的任何内容,那么我看不出您需要完全生成控制流的原因。如果您的生成器需要将控制权传递给另一个生成器,然后返回,那么我看到将控制权传递给。。。但在您的示例中,我看不出您需要委托给takeEvery的代码原因。如果我错了,请让我知道 这两个链接可能有助于解释:
(我这一页实际上是今天添加的) 从创作传奇开始:
yield*
只允许按顺序组合任务,因此一次只能将*交给一个生成器
我仍在尝试自己摸索这一切,但可能yield*
和takeEvery
意味着在后续的INCREMENT\u ASYNC
操作中,它调用子任务(incrementAsync
,在您的示例中),但在前一个子任务解决后,它会按顺序调用。如果要使用yield
,那么对于每个INCREMENT\u ASYNC
操作,它都会立即调用子任务,它们将并行执行和解析
使用
takeLatest
与takeEvery
的不同之处在于,它会取消先前启动新请求的请求 这两个链接可能有助于解释:(我这一页实际上是今天添加的) 从创作传奇开始:
yield*
只允许按顺序组合任务,因此一次只能将*交给一个生成器
我仍在尝试自己摸索这一切,但可能yield*
和takeEvery
意味着在后续的INCREMENT\u ASYNC
操作中,它调用子任务(incrementAsync
,在您的示例中),但在前一个子任务解决后,它会按顺序调用。如果要使用yield
,那么对于每个INCREMENT\u ASYNC
操作,它都会立即调用子任务,它们将并行执行和解析
使用
takeLatest
与takeEvery
的不同之处在于,它会取消先前启动新请求的请求 我猜takeEvery
返回一个迭代器,并yield*
委托给这个迭代器。一个正常的yield
只会将迭代器返回给调用方。只将迭代器返回给调用方会有什么负面影响?无论哪种方式,迭代器都会一直运行到耗尽为止,这就是我想要实现的。调用方似乎会自动调用生成器。也许这是Redux传奇中特有的行为。我猜takeEvery
返回一个迭代器,并yield*
委托给这个迭代器。一个正常的yield
只会将迭代器返回给调用方。只将迭代器返回给调用方会有什么负面影响?无论哪种方式,迭代器都会一直运行到耗尽为止,这就是我想要实现的。调用方似乎会自动调用生成器。也许这是Redux传奇中特有的行为。这似乎并没有回答我的问题。我不需要授权给生成器,生成器才能继续运行,所以为什么不直接使用yield
?我猜这是关于控制流的。如果您的迭代器不想生成takeEvery之外的任何内容,那么我看不出您需要完全生成控制流的原因。如果您的生成器需要将控制权传递给另一个生成器,然后返回,那么我看到将控制权传递给。。。但在您的示例中,我看不出您需要委托给takeEvery的代码原因。如果我错了,请让我知道。这似乎不能回答我的问题。我不需要授权给生成器,生成器才能继续运行,所以为什么不直接使用yield
?我猜这是关于控制流的。如果您的迭代器不想生成takeEvery之外的任何内容,那么我看不出您需要完全生成控制流的原因。如果您的生成器需要将控制权传递给另一个生成器,然后返回,那么我看到将控制权传递给。。。但在您的示例中,我看不出您需要委托给takeEvery的代码原因。如果我是错误的,请让我知道。链接是死的,你能提供替代请?链接是死的,你能提供替代请?