迭代完成后使用promise

时间:2017-01-08 04:51:40

标签: javascript asynchronous es6-promise

我试图弄清楚迭代完成后如何实现异步执行方式

基本上我有类似的东西:

  data.businesses.map( club => {
    axios.get(`${ROOT_URL}/club/${currentEmail}/${club.id}`)
      .then( ({data}) => {
        placeholder.push( Object.assign({}, club, data))
      })
      .then( () => ..do extra stuff )
  })

  // when data.businesses.map is done iterating all of the elements, do something 

如您所见,在通过axios

检索提取信息时存在一些异步问题

我对Promises的想法还不熟悉,但我不确定在哪里申请,如果适用的话

1 个答案:

答案 0 :(得分:3)

您可以使用Promise.all()等待一系列承诺解决(或至少一个拒绝)。

要收集该集合,您可以让.map()的迭代器函数通过从箭头函数中删除大括号来返回每个Promise。

let promisedClubs = data.businesses.map( club =>
  axios.get(`${ROOT_URL}/club/${currentEmail}/${club.id}`)
    .then( ({data}) => {
      placeholder.push( Object.assign({}, club, data))
    })
    .then( () => ..do extra stuff )
);

Promise.all(promisedClubs).then(clubs => {
    // when data.businesses.map is done iterating all of the elements, do something
}, failedClub => {
    // error handling
});