javascript - 如何从生成器函数内的回调函数调用 redux-saga 效果?

标签 javascript redux-saga

我的情况如下:

function * uploadFile({file}) {
    Papa.parse(file, {
        header: true,
        complete: function(results) {
            console.log(results.data);
            //if errors => call uploadFailed action with yield
            //else yield put(uploadSucceed)
        }
    });
}

无法调用注释代码,因为它不是生成器函数。如果我将 * 添加到回调定义中,则不会出现错误,但不起作用。

我还尝试将其包装在另一个接受回调的函数中,但没有任何运气。浏览了几个答案,例如 1 2但这些不是我的情况。据我所知,还没有关于 Papa 与 redux 的文档。任何帮助将不胜感激。

顺便说一句:

complete: yield call(someAction) //doesn't work as well.

最佳答案

Promisify解析函数并使用call效果

function parse(file) {
  return new Promise((complete, error) => {
    Papa.parse(file, {complete, error})
  })
}

function * uploadFile({file}) {
    try {
      const result = yield call(parse, file);

      // yield put success action

    } catch(error) {

      // yield put error action
    }

}

关于javascript - 如何从生成器函数内的回调函数调用 redux-saga 效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51878190/

相关文章:

javascript - 客户端启用javascript后自动刷新页面

typescript - 预期有 0​​ 个参数的问题,但在 Redux Toolkit 中得到 1

javascript - 当存在不使用 'yield' 的函数或类似 'call' 或 'put' 的效果时,如何测试传奇?

javascript - Twitter 库出错

redux-saga - 从 node_modules 导入 sagas 并将其与其他 sagas 组合

javascript - 如何重构 redux-saga 生成器函数?

reactjs - 第二次调度 Action 时不会触发 Saga

javascript - 如何声明函数变量并等待它完成?

javascript - 从功能外部控制 BX slider

javascript - 如何使用 Chrome 应用程序控制新的浏览器选项卡