2016-03-21 166 views
1

我正在使用'Q'庫在NodeJS中進行異步調用。 但是在其中一個用例中,我需要deferpromise,直到完成所有異步調用。NodeJS等待所有異步命令完成

public someFunction(files: string[]) : Q.Promise<string> { 
    var needSomeInfo; 
    var defer = Q.defer; 

    for (var i = 0; i < files.length; i++) { 
     _this.readFile(files[i]).then(function(res) { 
      needSomeInfo += res.Info; 

      j++; 
      if (j == files.length) { 
       defer.resolve(needSomeInfo); 
      } 
     }).fail(function(err) { 
      j++; 
      if (j == resultFiles.length) { 
       defer.resolve(needSomeInfo); 
      } 
//this is kinda stupid. I need to wait till all file calls are done because of consolidated info I need from them 
     }); 
    } 
    return defer.promise; 
} 

回答

1

您可以使用Q.all

Q.all(files.map(function (map) { 
    return _this.readFile(map); 
})); 
+0

感謝您的解決方案,但我早想通了一點:) – Reddy