【问题标题】:Why does 'yield' throw an error when used twice in saga? [duplicate]为什么 'yield' 在 saga 中使用两次时会引发错误? [复制]
【发布时间】:2019-03-25 15:13:22
【问题描述】:

我正在重新学习 sagas,我想知道为什么我在底部的 yield 上收到此错误。我是否需要将这两行包装在另一个生成器函数中并调用它以减轻错误并构建它?

export default function* showPermissionWall() {
  yield takeLatest(SHOW_TIMED_LOGIN_WALL, function* () {

      setTimeout(() => {

        yield put(showPermissionsNeededWall('Please log in', null)); // Parsing error: yield is a reserved word in strict mode
        readTimeLoginBoxShown();

      }, 1000 * SHOW_LOGIN_WALL_AFTER_IN_SECONDS); // Show after 3 minutes of reading
  });

【问题讨论】:

    标签: javascript reactjs redux-saga


    【解决方案1】:

    你在 setTimeout 中的回调函数不是生成器函数。 因此,您不能在其中使用 yield。

     setTimeout(function *() {
    
            yield put(showPermissionsNeededWall('Please log in', null));
            readTimeLoginBoxShown();
    
          }, 1000 * SHOW_LOGIN_WALL_AFTER_IN_SECONDS);
    

    应该能帮到你

    【讨论】:

    • 我现在在函数This generator function does not have 'yield'.中遇到错误
    • 您不再需要包装 setTimeout 的函数成为生成器函数。你可以让它成为一个正常的功能
    • 这个问题是包装setTimeout的函数是我的yield takeLatest生成器函数,所以我需要它:)
    • 你可以破解这个:export default function* showPermissionWall() { yield takeLatest(SHOW_TIMED_LOGIN_WALL, function* () { yield call (setTimeout, function *() { yield put(showPermissionsNeededWall('Please log in', null)); // Parsing error: yield is a reserved word in strict mode readTimeLoginBoxShown(); }, 1000 * SHOW_LOGIN_WALL_AFTER_IN_SECONDS); // Show after 3 minutes of reading });
    猜你喜欢
    • 2020-08-02
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多