【问题标题】:Binding variable on redux dispatch ActionCreatorredux dispatch Action Creator 中的绑定变量
【发布时间】:2016-11-29 18:01:30
【问题描述】:

我有一个 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(promises)

promises.length 始终为 2,(因为这两个实际上被推到了底部)。我可以在 .then 中控制语句,所以我知道它正在执行,但调度并没有在 promises 数组中结束。

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

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript reactjs redux redux-thunk


    【解决方案1】:

    问题在于,由于您在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)
      }
    }
    

    【讨论】:

    • 嘿!感谢你的回答。调度现在都被推送,除了它说在段落调度中version 是未定义的。我也试过.bind(version)
    • 不要绑定任何东西,因为它不起作用。上面的代码清楚地假设版本是第一个动作创建者的承诺所解析的。情况可能并非如此。因此,请查看ActionCreators.version 的问题。确保它返回 Promise 并确保 promise 解析为预期的版本对象。
    • 实际上我说版本未定义是错误的,它是视图文件中的其他内容!这很好用,谢谢!
    猜你喜欢
    • 2016-12-10
    • 2021-11-05
    • 2020-02-03
    • 2019-08-24
    • 2020-08-17
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多