等待承诺,然后承诺所有JavaScript

时间:2019-03-09 13:06:15

标签: javascript redux

我有这样的承诺:

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}));
            });
        })
    };
}

1 个答案:

答案 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