簡體   English   中英

如何等待來自Redux操作創建者的多個API調用?

[英]How to wait for multiple API calls from a Redux action creator?

可以說我在動作中調用了一個調度方法:

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數據。 它在循環內部,我希望它為循環中的所有數據dispatch

我該如何實現?

謝謝

一旦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)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM