没有数组时异步“for”循环

时间:2017-01-24 15:42:42

标签: node.js asynchronous

this question中的OP一样,我想做一个for循环,并在所有操作完成后执行某些操作。

我检查了答案,async库,但所有解决方案涉及迭代数组。我不想做一个数组的“forEach”元素,我没有数组。

如果我只想做n次手术怎么办?例如,假设我想在我的数据库中插入n个随机条目,然后做些什么?现在我遇到了类似的问题:

function insertMultipleRandomEntries(n_entries,callback){
    var sync_i=0;
    for(var i=0;i<n_entries;i++){
        insertRandomEntry(function(){
            if(sync_i==(max-1)){
                thingDoneAtTheEnd();
                callback(); //watched by another function, do my stuff there
            }
            else{
                sync_i++;
                console.log(sync_i+" entries done successfully");
                thingDoneEachTime();
            }
        });
    }
}

这绝对是可怕的。在异步中我找不到任何简单的东西,你会怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用Promises,自4.0版以来在node.js中没有库支持。

如果insertRandomEntry的回调函数有参数,您可以将其传递给resolve。在给then的函数中,您会收到一个给resolve的参数数组。

function insertMultipleRandomEntries(n_entries,callback){
    var promises = [];
    for(var i=0;i<n_entries;i++) {
        promises.push(new Promise(function (resolve, reject) {
          insertRandomEntry(function (val) {
            thingDoneEachTime(val);
            resolve(val);
          });
        }));
    }
  
    Promise.all(promises).then(function (vals) {
      // vals is an array of values given to individual resolve calls
      thingDoneAtTheEnd();
      callback();
    });
}