2016-03-21 12 views
1

Ich benutze 'Q' Bibliothek, um Async-Aufrufe in NodeJS. Allerdings muss ich in einem der Anwendungsfälle defer die promise bis alle Async-Aufrufe abgeschlossen sind.NodeJS warten bis alle Async-Befehle abgeschlossen sind

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; 
} 

Antwort

1

können Sie Q.all

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

Danke für die Lösung verwenden, aber ich dachte, etwas zu früh aus :) – Reddy

Verwandte Themen