См. Комментарий FrankerZ , очевидно, эта dispatch
функция является стандартной вещью Redux (я не использую Redux), и она не возвращает обещание, поэтому использовать ее не имеет смысла. 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);
});
}
Примечание по поводу getThis
: См. этот вопрос и ответы на него . Нет необходимости в new Promise
, когда у вас уже есть обещание. Я не знаю, правильный ли этот код getThis
с точки зрения Redux, но вот тот же код, который не использует 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
:
export function getThis() {
return async function(dispatch, getState) {
const {data} = await axios.get('api/this/' + lienBuild);
return dispatch({type: "FETCH_THIS", data});
};
}