2017-03-12 3 views
0

Ich habe variable Nummer der asynchronen Funktion zu laufen. Für zwei Funktionen kann ich so schreiben:Führen Sie die n-Nummer der asynchronen Funktion vor dem Aufruf einer anderen Methode in nodejs

async.parallel([ 
     function(parallelCb) { 
     client.get('statuses/user_timeline', {screen_name: 'rajeevnodetest'}, function(error, tweets, response){ 
      parallelCb(null, {error: error, tweets: tweets}); 
     });  
    }, 
     function(parallelCb) { 
     client.get('statuses/user_timeline', {screen_name: 'rajeev_jayaswal'}, function(error, tweets, response){ 
      parallelCb(null, {error: error, tweets: tweets}); 
     });  
    }, 
    ], function(error, results) { 
     // results will have the results of all 2 
     res.send(JSON.stringify(results)); 
    }); 

Wie soll ich Variable Anzahl der Funktion innerhalb async.parallel aufrufen? Ich habe versucht, for-Schleife innerhalb async.parallel hinzuzufügen, aber es hat nicht funktioniert. Irgendein Vorschlag ?

+0

vielleicht können Sie die Funktion rekursiv machen und ausführen, bis der Parameter seines Rückrufs mit dem Aufruf selbst n erreicht? –

Antwort

1

Ich gehe davon aus, dass Sie die gleiche API erreichen werden, um Benutzer-Tweets wiederzuerlangen.

Deshalb haben Sie ein Array alle Hochtöner enthält Griffe:

var screenNames = ['rajeevnodetest', 'rajeev_jayaswal', ..., 'brandnewhandle']; 

Sie eine Funktion definieren, können die API wie folgt zu erreichen:

//Custom function to find user status list 
var findStatus = function(handle, callback) { 
    client.get('statuses/user_timeline', {screen_name: handle}, function(error, tweets, response){ 
    callback(null, {error: error, tweets: tweets}); 
    }); 
} 

Dann könnten Sie Funktion verwenden, um Asyn.map um diese Funktion für jedes Element in der Tweeter-Handle-Liste einmal auszuführen:

async.map(screenNames, findStatus, function(err, results) { 
    // results will have the results of all 2 
    res.send(JSON.stringify(results)); 
}); 

Wenn Sie für jedes Hochtöner-Handle mehrere API-Endpunkte aufrufen müssen, müssen Sie paralell verwenden und für jeden Endpunkt einen Eintrag erstellen.

+0

Das ist, was ich gesucht habe. Ich danke dir sehr. –

0

Sie in EventEmitter

Aufruf der Methode emit withing Ihre async Funktionen aussehen sollte und haken die ganze Funktion Sie

1

Sie können zu diesem Ereignisnamen ausführen möchten verwenden async.times Funktion wie diese

function(parallelCb) { 
    async.times(50, function (n, next) { 
     client.get('statuses/user_timeline', {screen_name:'rajeevnodetest'}, 
      function(error, tweets, response){ 
       next(err, tweets); 
      }); 
    }, function (error, results) { 
     // do something with your results 
      parallelCb(null, {error: error, tweets: results}); 
    } 
} 

Also, wenn Sie n Anzahl der asynchronen Funktion vor dem Aufruf einer anderen Methode ausführen möchten Sie async.series-Methode mit async.times in es verwenden müssen, weil gemäß async.parallel Dokumentation es die Aufgaben coll ausführen Funktionen gleichzeitig ausführen, ohne zu warten, bis die vorherige Funktion beendet ist.

Verwandte Themen