Ich habe versucht zu verstehen, wie Mike Bostock's queue.js funktioniert, aber ich kann nicht sehen, wie es funktioniert. Der Teil, den ich nicht verstehe, ist, wie der Code es schafft, Callbacks weiter auszuführen. Insbesondere bin ich unsicher bezüglich der Methode pop()
(Zeile 45). Aus meiner Sicht nimmt die Methode die nächste unverarbeitete, verzögerte Funktion an; hängt einen Callback an, der (möglicherweise) die nächste verzögerte Funktion in der Warteschlange startet und ausführt, wenn die Funktion sofort beendet wird; führt dann diese Funktion schließlich aus. Meine Frage ist: welcher Code führt diesen Rückruf aus?Wie funktioniert queue.js?
5
A
Antwort
10
Jede zurückgestellte Funktion gibt tatsächlich nichts zurück - sie müssen ihr letztes Argument als Callback ausführen. Zum Beispiel wird diese Arbeit nicht
var foo = function(i) {
console.log(i);
return i;
}
var finished = function(error, results) {
console.log(results);
}
queue(2)
.defer(foo, 1)
.defer(foo, 2)
.defer(foo, 3)
.defer(foo, 4)
.awaitAll(finished); // only prints "1" and "2", since foo() doesn't execute callbacks
Wenn wir jedoch foo
modifizieren, um einen Rückruf zu nehmen,
var foo = function(i, callback) {
console.log(i);
callback(null, i); // first argument is error reason, second is result
}
Dann wird es, wie die Callback-Ausführung bewirkt, dass queue
fortzusetzen.
+0
Schönes Beispiel, hat mir wirklich geholfen – megatron77
2
Wenn ich den Code richtig verstehen, queue.await()
und queue.awaitall()
setzten den Rückruf in dem await
Instanz-Variable, und dann wird dies durch notify()
ausgeführt.
Verwandte Themen
- 1. Wie funktioniert extjs Ext.require() funktioniert
- 2. Wie funktioniert -performSelector: withObject: afterDelay: funktioniert?
- 3. Wie funktioniert die Programmierung?
- 4. Wie funktioniert JavaScript [] wirklich?
- 5. Wie sendmsg funktioniert?
- 6. Wie funktioniert IP Geolocating?
- 7. Wie funktioniert @tailrec
- 8. Wie funktioniert eine Projektionsmatrix?
- 9. Wie funktioniert Livecycle?
- 10. Wie funktioniert f.lux?
- 11. Wie funktioniert Curry (==)?
- 12. Wie funktioniert CATransition?
- 13. Wie funktioniert Javascript sort()?
- 14. Wie funktioniert zmq poller?
- 15. Wie funktioniert localizedStringWithFormat?
- 16. Wie funktioniert Excel VSTO?
- 17. Wie funktioniert jQuery.on()?
- 18. Wie funktioniert ein Debugger?
- 19. $ parser.unshift ?? wie funktioniert das?
- 20. strlen: wie funktioniert es?
- 21. Wie funktioniert Mongodb Index?
- 22. Wie funktioniert _mm_mwait?
- 23. Wie funktioniert der Kopierkonstruktor?
- 24. Wie funktioniert MOVSX Montageanleitung?
- 25. Wie funktioniert Kubernetes Scheduler?
- 26. Wie funktioniert Stringstream intern?
- 27. Wie funktioniert ein Geodatenindex?
- 28. Wie gepufferte Streams funktioniert?
- 29. Wie funktioniert [UIView beginAnimations]?
- 30. Wie funktioniert diese Normalisierungsfunktion?
Das ist ein sehr schlecht kommentierter Code. –
@LightnessRacesinOrbit: Es ist ein sehr kurzer und prägnanter Code. Die Variablennamen sind beschreibend und ihre Funktion ist kommentiert. Ich sehe keinen Grund, es zu kommentieren ... – Bergi
@Bergi: Ich frage nur nach, wie, ein oder zwei. Beschreibungen der einzelnen Funktionen Die Frage des OP zeigt die Notwendigkeit auf. –