首页 文章

javascript / mongoose在for循环中使用async函数有意外行为吗?

提问于
浏览
0

我在for循环中有一个名为populateFavoriteItem的异步函数:

var result = [];
   for (var i = 0; i <array.length ; i++) {
        populateFavoriteItem(accountId,array[i],function(doc){
        result.push(doc);
        //mark 1
        })
      // if (i == array.length - 1) {
      // console.log(result);
      // callback(result);     
      // }  
   }
   //mark 2
   console.log(result);
   callback(result);

它总是首先运行标记2然后运行到标记1.因此,我得到一个空结果数组 . 似乎结果不是populateFavoriteItem回调函数 .

我试图在for循环中写if()条件但得到相同的结果,我该怎么办?

1 回答

  • 0

    使用Node.js eventEmitter:

    var result = [];
       var obj;
       var j = 0;
       var myEventEmitter = new eventEmitter;
       myEventEmitter.on('next',addResult);
       function addResult(){
          result.push(obj)
          j++;
          if (j == array.length) {
            callback(result);
          }
       }
    
    
       var populateFav = promiseify(populateFavoriteItem);           
       for (var i = 0; i <array.length ; i++) {
            var ii = i;
            populateFavoriteItem(accountId,array[ii],function(doc){
              //result.push(doc);
              obj = doc;
              myEventEmitter.emit("next");
            })
       }
    

相关问题