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的代码原因。如果我是错误的,请让我知道。链接是死的,你能提供替代请?链接是死的,你能提供替代请?