我有这样的承诺:
return function (dispatch, getState) {
Promise.all([
dispatch(getThis()),
dispatch(getThat()),
dispatch(getThese()),
dispatch(getThose()))]
).then(() => {
let state = getState();
dispatch({
//dispatch
});
}).catch(function (err) {
console.log(err);
});
}
但是实际上我希望在调用任何其他调度之前完成getThis(),因为它们都依赖于getThis()的返回。 该如何处理?
非常感谢!
编辑我的函数如下:
export function getThis() {
return function (dispatch, getState) {
return new Promise((resolve, reject) => {
axios.get('api/this/' + lienBuild).then((response) => {
resolve(dispatch({type: "FETCH_THIS", data: response.data}));
});
})
};
}
答案 0 :(得分:1)
请参见FrankerZ's comment,显然,此dispatch
函数是Redux的标准配置(我不使用Redux),并且它不会返回诺言,因此使用{ {1}}。
但是回答“我将如何首先等待Promise.all
”的诺言方面:只需将其移至链的开头:
getThis
或不使用return function (dispatch, getState) {
dispatch(getThis()) // First this, then...
.then(result => Promise.all([ // ...these
dispatch(getThat(result)), // (I've passed the result to all three, but...)
dispatch(getThese(result)),
dispatch(getThose(result))
]))
.then(() => {
let state = getState();
dispatch({
//dispatch
});
}).catch(function (err) {
console.log(err);
});
}
,因为显然这是错误的:
dispatch
关于return function (dispatch, getState) {
getThis() // First this, then...
.then(result => Promise.all([ // ...these
getThat(result), // (I've passed the result to all three, but...)
getThese(result),
getThose(result)
]))
.then(() => {
let state = getState();
dispatch({
//dispatch
});
}).catch(function (err) {
console.log(err);
});
}
的旁注:请参见this question and its answers。当您已经有了承诺时,就不需要getThis
。我不知道new Promise
代码在Redux方面是否正确,但这是相同的代码,没有不必要地使用getThis
:
new Promise
或具有解构和简写属性:
export function getThis() {
return function(dispatch, getState) {
return axios.get('api/this/' + lienBuild).then(response => dispatch({type: "FETCH_THIS", data: response.data}));
};
}
或者是否可以使用export function getThis() {
return function(dispatch, getState) {
return axios.get('api/this/' + lienBuild).then(({data}) => dispatch({type: "FETCH_THIS", data}));
};
}
/ async
:
await