javascript - redux 调度 ActionCreator 上的绑定(bind)变量

标签 javascript reactjs redux redux-thunk

我有一个 Promise 数组,我试图将新的 Promise 推送到另一个 Dispatch.then 函数内的该数组中,但该数组似乎总是超出范围

load(params, auth) {
    return dispatch => {
        const { passage, versions, language_tag } = params
        let promises = []

        versions.forEach((id) => {
            // get the version info, and then pass it along
            dispatch(ActionCreators.version({ id: id })).bind(promises).then((version) => {
                promises.push(dispatch(ActionCreators.passages({
                    id: id,
                    references: [passage],
                    versionInfo: {
                        local_abbreviation: version.abbreviation,
                        local_title: version.title,
                        id: version.id,
                    },
                })))
            })
        })
        // 
        promises.push(dispatch(ActionCreators.configuration()))
        promises.push(dispatch(ActionCreators.byRef({ language_tag })))

        console.log(promises.length)
        return Promise.all(promises)
    }
},

我尝试了几种不同的方法,例如在版本循环内的调度之前设置 var that = this ,以及此处显示的内容,尝试使用 .bind ( promise ) 在调度上。

promises.length 始终为 2(因为实际上两个被推到了底部)。我可以在 .then 中控制台语句,因此我知道它正在执行,但调度不会最终出现在 Promise 数组中。

我很可能以错误的方式思考调度函数。

如有任何帮助,我们将不胜感激!

最佳答案

问题是,由于您在 then() 上添加了 promise ,因此在添加 promise 时您已经返回了数组。所以它们确实被添加了,但为时已晚。

相反,试试这个:

load(params, auth) {
  return dispatch => {
    const { passage, versions, language_tag } = params;
    let promises = [];

    versions.forEach((id) => {
      // get the version info, and then pass it along
      promises.push(dispatch(ActionCreators.version({ id: id })).then((version) => {
        return dispatch(ActionCreators.passages({
          id: id,
          references: [passage],
          versionInfo: {
            local_abbreviation: version.abbreviation,
            local_title: version.title,
            id: version.id,
          },
        }));
      }));
    });
    //
    promises.push(dispatch(ActionCreators.configuration()));
    promises.push(dispatch(ActionCreators.byRef({ language_tag })));

    console.log(promises.length);
    return Promise.all(promises)
  }
}

关于javascript - redux 调度 ActionCreator 上的绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40872680/

相关文章:

javascript - 为什么我的 Angular 测试 $scope 上没有定义方法?

reactjs - Material 界面 : Change theme color by SASS variables

javascript - 初始化 auth2 以在 React 中登录用户

javascript - React 中函数绑定(bind)后缺少状态值

javascript - keepUnusedDataFor 和 refetchOnMountOrArgsChange 之间有什么区别?

javascript - react redux async action 完成函数后调用下一个函数

reactjs - "dispatch"未定义

javascript - 单击关闭按钮时 Bootstrap 警报不会关闭

javascript - 选择一个选项来选中/取消选中复选框不起作用?

javascript - 将字符串和变量传递给函数