我有一个 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/