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

标签 javascript promise redux

假设我在我的操作中调用了一个调度方法:

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 数据。它在循环内,我希望它能调度循环中的所有数据。

我怎样才能做到这一点?

谢谢

最佳答案

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

您可以使用 Promise.all(promises) 创建一个在所有子 promise 都已解决时解决的 promise 。您可以在创建 promise 时将它们收集到一个数组中,然后返回 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)
  }
}

关于javascript - 如何等待来自 Redux 操作创建者的多个 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309139/

相关文章:

javascript - 通过 Javascript 从其他页面平滑滚动

mysql - 停止 promise 链中的另一个 .then() 执行

javascript - 在 React.js 中调用同一页面中的多个组件

javascript - React/react-router 重定向到一组 URL?

javascript - 如何使用 Jest 测试导入/导出?

javascript - Coffeescript HTML5 音频暂停所有其他音频元素

javascript - HTML - 如何制作 "Read More"按钮

java - 在 Play Controller-Action 中通过 #flatMap() 链接 Promise

javascript - 当 Microsoft Edge 中存在许多(以及更多)背景元素时,输入字段文本输入变得缓慢

javascript - 在服务中使用 promise 但不返回 promise