如何等待来自Redux操作创建者的多个API调用?

ary*_*yan 1 javascript promise redux

可以说我在动作中调用了一个调度方法:

return dispatch(add_data(data)).then(function(response){console.log("Done")}
Run Code Online (Sandbox Code Playgroud)

和我的add_data方法看起来像:

export function add_data(data){

  return (dispatch, getState) => {

    for(var i in data){
      var data = {'url': data[i]}
      return dispatch(myApi({url: "some_url", method: "POST", data: data,}
        )).then(response => {
        console.log(response)
        return response.json()
      }).then(response => {
        console.log(response)
        return dispatch({response, type: types.ADD_DATA})
      })
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它仅适用于first数据。仅first发送数据。它在循环内,我希望它能dispatch处理循环中的所有数据。

我该如何实现?

谢谢

Dan*_*mov 5

一旦您return,该return语句即退出该功能。如果您不想在循环中间从函数返回,请不要在循环中间从该函数返回return。

您可以Promise.all(promises)用来创建一个承诺,该承诺在所有子承诺都已解决时会解决。您可以在创建承诺时将它们收集到一个数组中,然后返回Promise.all(promises)以全部表示它们:

export function add_data(data){
  return (dispatch, getState) => {
    var promises = [];

    for (var key in data) {
      var itemData = {'url': data[key]}

      var promise = myApi({
        url: "some_url",
        method: "POST",
        data: itemData
      }).then(
        response => response.json()
      ).then(response => {
        dispatch({response, type: types.ADD_DATA})
      })

      promises.push(promise)
    }

    return Promise.all(promises)
  }
}
Run Code Online (Sandbox Code Playgroud)