尝试使用Redux-Saga调用并行任务会导致all()无法正常工作

时间:2019-04-04 19:22:18

标签: reactjs redux redux-saga

我正在尝试使用yield all()并行运行两个任务,但收到以下日志错误Object(...) is not a function

当我自己调用const response = yield call(request, url)时,它可以工作。不知道为什么yield all()不喜欢我要传递的请求函数。

这是代码,


const url = `${apiHost}${getSpecificTestConfiguration.endpoint}${configurationId}`;


    const [response, itemPool] = yield all([
      call(request, url),
      put(getItemPool(itemPoolId)),
    ]); 

这是传递给调用效果的请求函数,在这里抛出错误


/**
 * Requests a URL, returning a promise
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export default function request(url, options = {}) {
  const opts = addHeaders(options);

  return fetch(url, opts)
    .then(checkStatus)
    .then(parseJSON)
    .then((data) => ({ data }));
}

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

我之前的评论肯定是不合逻辑的。

确保redux-saga的版本为0.15.0或更高。这是添加all的时间。

我能够使用版本0.14.X和以下导入内容import { ..., all } from 'redux-saga/es/effects在您的项目中重现您的确切问题,它非常有帮助,不会抱怨all不存在。通过更新为^0.15.0并从'redux-saga/effects'导入,解决了该问题。

希望这会有所帮助。