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

时间:2016-02-10 07:24:14

标签: javascript promise redux

让我说我在行动中调用一种调度方法:

exception 'yii\base\UnknownMethodException' with message 'Calling unknown method: yii\web\User::getProfile()' in ... ...

我的return dispatch(add_data(data)).then(function(response){console.log("Done")} 方法如下:

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}) }) } } } 个数据。仅调度first个数据。它是内部循环,我期望它来自循环的所有数据first

我怎样才能做到这一点?

谢谢

1 个答案:

答案 0 :(得分:5)

只要returnreturn语句就会退出该函数。如果您不想从循环中间的函数返回,请不要在循环中间从return返回。

您可以使用Promise.all(promises)创建一个在所有子承诺解决后解决的承诺。您可以在创建数组时将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)
  }
}