Machen Sie einen neuen asynchronen Aufruf in einer Callback-Funktion
-
05-07-2019 - |
Frage
Ich möchte die Google AJAX-Feed API holen mehr Feeds und zeigt sie auf einer Webseite.
kann ich nicht von Google Feedcontrol-Klasse verwenden, weil ich die Art und Weise die Elemente des Futters steuern möchten angezeigt. Das läßt mich mit Google-Feed Klasse, die als einzige Option.
Ich habe es mit einem einzigen Feed zu arbeiten: eine URL und eine Callback-Funktion zur Verfügung stellen; verarbeitet die Ergebnisse des Futters innerhalb der Callback-Funktion.
Meine Frage: Wie kann ich mehrere Feeds holen? Ich würde irgendwie ein neues google.feeds.feed Objekt innerhalb der Callback-Funktion machen muß und sie mit einer neuen URL und ... die gleiche Callback-Funktion (?)
ich nie Informatik studiert, so dass diese Art von Rekursion macht meinen Kopf drehen. Jeder kann erklären, was ich tun?
Lösung
Sicher, können Sie es auf diese Weise tun, hier einige Pseudo-Code:
// 'feeds' is an array of the feed URLs
function grabFeeds(feeds) {
var index;
// We start with the first feed
index = 0;
// Kick off the process
feedWorker();
// Our "go get the next feed" function
function feedWorker() {
var feed;
// Do we have any more?
if (index < feeds.length) {
// Yes, request it and bump our index
// (You could combine these lines, but it's
// clearer to keep them separate)
feed = feeds[index];
++index;
start_feed_download(feed, callback);
}
}
// Our callback function
function callback() {
// ...do something with the result...
// Kick of the next feed (feedWorker is defensive,
// so we don't have to check index here)
feedWorker();
}
}
Ich weiß nicht, die Google Feed API, damit die Platzhalter start_feed_download
Funktion.
Was das bedeutet ist starten der Prozess der die Feeds über die grabFeeds
Funktion greifen, die eine Reihe von RSS-Feeds akzeptiert. grabFeeds
startet feedWorker
, der die erste Zuführungsanforderung einleitet, und dann kehrt die sofort (fast sicher, bevor der erste Feed abgerufen werden). callback
verarbeitet das Ergebnis, dann fragt feedWorker
, um die nächste Zuführungsanforderung kick off (falls vorhanden).
Die "Magie" ist hier, dass feedWorker
und callback
beide Verschlüsse , so dass, obwohl grabFeeds
bereits zurückgekehrt ist, der index
und feeds
Variablen lebt (in einem Objekt eines „Ausführungskontext“ bezeichnet), solange alles das, was im Innern des Ausführungskontextes verweist - in unserem Fall , bis callback
und feedWorker
sind nicht mehr referenziert von Googles Zeug.
Andere Tipps
Ja, können Sie das in Ordnung, so stellen Sie sicher, dass, wenn Sie die Rekursion zu tun haben Sie zwei Fälle (a) den Basisfall und (b) der rekursive Fall.
Nur im zweiten Fall hat sich die Funktion aufrufen, stellen Sie sicher, dass Sie nicht in der Basisfall sonst werden Sie mit einer unendlichen Rekursion enden. Zum Beispiel in dieser Fakultäts-Funktion 0 ist das Basismodell, alles andere ist die rekursive Fall
function fact(n) {
if (n==0) { return 1; }
else { return n * factorial(n-1) }
}
Alternativ könnten Sie zu einer Zeit, sie ein tun, das heißt. Starten Sie den ersten, dann den zweiten beginnen, statt warten zu müssen, für eine vollständig vor der zweiten beginnt Laden laden zu.