2016-06-28 2 views
0

Diese Frage könnte ein wenig vage sein, aber ich versuche mein Bestes zu erklären.Wie behandelt man nacheinander asynchrone Ergebnisse von API?

Ich versuche, ein Array aller Tweets zu erstellen, die ich von Twitter API abrufen kann, aber es beschränkt jede Anfrage auf 200 zurückgegebenen Tweets. Wie kann ich asynchron an Twitter bis zu der maximalen Anzahl von 3200 zurückgegebenen Tweets anfordern? Was soll ich sagen, ist es möglich, die API von Twitter asynchron aufzurufen, aber das Array sequentiell zu erstellen, um sicherzustellen, dass die Tweets korrekt in Bezug auf das Datum sortiert sind?

So habe ich ein Array:

var results = []; 

und ich bin mit Knotens Anforderungsmodul:

var request = require('request'); 

, was ich jetzt haben (nur für die Grenze von 200) ist

request(options, function(err, response, body) { 
    body = JSON.parse(body); 
    for (var i = 0; i < body.length; i++) { 
     results.push(body[i].text); 
    } 
    return res.json(results); 
}); 

Ich habe untersucht, vielleicht mit dem "Versprechen" -Modul, aber es war verwirrend zu verstehen. Ich habe versucht, eine while-Schleife zu verwenden, aber es wurde kompliziert, weil ich dem Pfad, den der Server nahm, nicht folgen konnte.

Lassen Sie mich wissen, wenn dies die Dinge nicht gut erklären würde.

Am Ende möchte ich, dass Ergebnisse ein Array mit allen Tweets, die die Anforderungen senden, gefüllt werden.

Antwort

1

Ich würde vorschlagen, request-promise anstelle von request zu verwenden. Hier ist meine Lösung.

var rp = require('request-promise'); 
var tweets = []; 
var promises = []; 
for (var i =1; i< 10; i++){ 
    var promise = rp(options); 
    promises.push(promise); 
} 
Promise.all(promises).then(function(data){ 
    data.forEach(function(item){ 
    // handle tweets here 
    }); 
    return res.json(tweets); 
}); 
+0

Ich muss auf einige der Daten von der Anfrage zugreifen, bevor alle Daten verarbeitet werden ... wie kann ich das tun? Wie ein "Blick" in den Inhalt des Versprechens? –

Verwandte Themen