【问题标题】:redux-saga why do you need a yield next to the put?redux-saga 为什么在 put 旁边需要一个 yield?
【发布时间】:2019-03-29 01:12:22
【问题描述】:

我有以下传奇

export function* login(userName, password) {
  yield put({ type: 'LOGIN_DONE', status: 'success', userName: 'test' });

  // Redirect to the landing page
  yield put(push('/location'));
}

我对以下内容感到困惑

如果我没有在第一次 put 之前放置 yield,则不会调度该操作。这是预期的行为吗?如果是,为什么?我认为在最终 put 旁边有一个 yield 就足够了,但这似乎只调度了第二个 action

谢谢

【问题讨论】:

标签: redux-saga


【解决方案1】:

生成器函数可以暂停其进程,直到后续生成器函数终止。这是通过使用 yield 关键字来实现的:

然后中间件执行由 效果 API。 同时,生成器将暂停,直到 效果执行终止。 收到结果后 执行时,中间件在 Generator 上调用 next(result) 传递 它将检索到的结果作为参数。重复这个过程直到 生成器正常终止或抛出一些错误。

因此,在您的情况下,该操作可能会触发另一个 saga,这可能需要在继续下一个收益之前完成他们的工作。如果您不放置该 yield,这可能会导致后续生成器函数异步运行并且结果不会如预期那样的副作用。

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2017-06-14
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多