javascript - forEach()里面使用异步函数,那如何等所有的异步函数都执行完再 进行下一步
迷茫
迷茫 2017-04-11 12:24:53
0
3
571

比如
var arry = [...];
arry.forEach(function(elem){

//异步函数

})

//下一步

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(3)
洪涛

可以使用Promise:

var arry = [...];
Promise.all(arry.map(function(elem){
  return new Promise(function(resolve, reject){
    ...
    resolve(result);
  })

})).then(function(data){
  //在这就可以等所有的返回结果可以得到
})

或者

var arry = [...];
var counter = 0;
arry.forEach(function(elem){
  //异步回调中
  counter++;
  if(counter === arr.length){
    //在这执行所有执行的完后的
  }
})
黄舟

感觉你这个表述还是同步的意思,异步函数不应该阻塞下一步的。

你可以看下这个问题

搬运下代码

function callback () { console.log('all done'); }

var itemsProcessed = 0;

[1, 2, 3].forEach((item, index, array) => {
  asyncFunction(item, () => {
    itemsProcessed++;
    if(itemsProcessed === array.length) {
      callback();
    }
  });
});
Ty80

使用 async

Github: async
文档: async-Docs

const async = require('async');

async.each(
    ['file1', 'file2', 'file3'],
    (item, callback) => {
        setTimeout(
            () => {
                console.log('item:', item);
                callback(null);
            },
            1000
        );
    },
    () => {
        console.log('done');
    }
);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!