Ich habe hier wirklich Probleme, asynchrones JavaScript zu schreiben. Könnten Sie bitte ein Beispiel für eine einfache JavaScript-Funktion zur Verfügung stellen, die in einfachen JavaScript geschrieben asynchron ist (und nicht Node.js oder JQuery verwenden)Was ist ein einfaches Beispiel für eine asynchrone JavaScript-Funktion?
Antwort
JavaScript selbst ist synchron und single-threaded. Sie können keine asynchrone Funktion schreiben; plain JS hat keine Timing-API. Es wird keine Nebenwirkungen von parallelen Threads geben.
Was können Sie tun, ist es, einige APIs, die von Ihrer Umgebung (Node.js, Web-Browser) verwendet werden, solange können Sie asynchrone Aufgaben planen - mit Timeouts, Ajax, FileAPI, requestAnimationFrame
, nextTick
, Webworkers, DOM-Ereignisse, was auch immer.
Ein Beispiel setTimeout
mit (von der HTML Timing API zur Verfügung gestellt):
window.setTimeout(function() {
console.log("World");
}, 1000);
console.log("Hello");
Update: Seit ES6 gibt es verspricht als asynchrone primitive in einfache JavaScript gebaut, so dass Sie
tun könnenPromise.resolve("World").then(console.log); // then callbacks are always asynchronous
console.log("Hello");
Aber sie sind nicht wirklich hilfreich, wenn es nichts gibt, auf das man warten könnte (wie eine Zeitüberschreitung). Und sie ändern auch nichts an dem Threading-Modell. Die gesamte Ausführung wird vollständig ausgeführt, ohne dass irgendwelche Ereignisse in der Mitte stören.
Gute Antwort, aber war ein Beispiel mit' bind' wirklich notwendig? Könnte das OP noch mehr verwirren ... – bfavaretto
+1, sehr wahr; Async-Tasks werden nur in der Ausführungswarteschlange verschoben. Daher der (manchmal) nützliche Trick mit 'setTimeout (func, 0)'.) – raina77ow
@bfavaretto: Ich wollte Xeanos Antwort nicht wiederholen. Changed jetzt, um Verwirrung zu reduzieren :-) – Bergi
Dies ist asynchron:
setTimeout(function(){
console.log('1');
}, 2000);
console.log('2');
2 wird auf die Konsole geschrieben werden vor 1. Weil setTimeout asynchron ist.
Hier ist ein sehr einfaches Beispiel:
for (var i = 0; i < 10; i++) {
window.setTimeout(function() {
console.log(i);
}, 2000);
}
Sie könnten diese erwarten console.log()
Sie 0, 1, 2
usw. zu zeigen, ruft, wie in diesem Code-Schnipsel:
for (var i = 0; i < 10; i++) {
console.log(i);
}
Aber in der Tat nur 10
s wird gedruckt! Der Grund, dass Funktionen in setTimeout
Funktion übergeben (als "Callback-Argument) wird aufgerufen werden, nachdemfor
Schleife abgeschlossen ist - dh nach i
Wert bis 10.
gesetzt Doch sollten Sie eine Sache verstanden: alle JavaScript in einem Browser wird auf einem einzelnen Thread ausgeführt; asynchrone Ereignisse (wie Mausklicks und Timer) werden nur ausgeführt, wenn in der Ausführungswarteschlange eine Öffnung stattgefunden hat. Hier ist a brilliant article geschrieben von John Resig zu diesem Thema.
Das Problem mit der Schleife ist ein Scoping-Problem, nicht wegen ihrer asynchronen Natur. Wenn sie korrekt ausgerichtet wären, würde die Schleife wie erwartet funktionieren. Obwohl es eine gute Erklärung der Funktionen ist, die an 'setTimout' übergeben werden, die nach der 'for'-Schleife ausgeführt werden – Ian
- 1. Was ist ein einfaches Beispiel für Gleitkomma-/Rundungsfehler?
- 2. Ein einfaches Beispiel für Messaging mit RabbitMQ
- 3. Was ist ein echtes Beispiel für CORBA?
- 4. Was ist ein praktisches Beispiel für Pooling?
- 5. Einfaches Beispiel für Erlang memoization
- 6. Einfaches Beispiel für pthread_join Deadlock
- 7. Was ist ein gutes Beispiel für eine Java Swing-Anwendung?
- 8. Was ist ein echtes Beispiel für eine prototypische Vererbung?
- 9. Was ist ein Beispiel für eine Hashtable-Implementierung in C#?
- 10. Was ist das asynchrone Muster für asyncwasserfall?
- 11. SocketAsyncEventArgs? - einfaches Beispiel
- 12. Was ist ein einfaches Beispiel für die einfache Vererbung mit dem Schlüsselwort super() in Python?
- 13. Einfaches Beispiel mit Erlang für https nach
- 14. C++ - Warteschlange - einfaches Beispiel
- 15. Einfaches Thread-Beispiel Delphi
- 16. Ist ein Beispiel für eine gute Praxis?
- 17. Verständnis C++ regex durch ein einfaches Beispiel
- 18. Android Scroller einfaches Beispiel
- 19. Einfaches Beispiel für Javascript guten Programmierstil?
- 20. Was ist ein sehr einfaches Authentifizierungsschema für Sinatra/Rack
- 21. nodeJs callbacks einfaches beispiel
- 22. ANTLR: Gibt es ein einfaches Beispiel?
- 23. Einfaches Beispiel für Masstransit mit RabbitMQ
- 24. Beispiel für eine Stornierungstokenquelle
- 25. Benötigen Sie ein Beispiel für asynchrone HTTP-Anfragen
- 26. Einfaches Beispiel für die Verwendung von ast.NodeVisitor?
- 27. Ein einfaches Scatterplot-Beispiel in D3.js?
- 28. Was ist eine synchrone und asynchrone Methode?
- 29. v4l2 sehr einfaches Beispiel
- 30. Einfaches Beispiel für benutzerdefinierte Anmerkungen mit Symfony2
'setTimeout' ??? – Bergi
Event-Handler. –
@SLaks las Bergis Antwort. Das ist im Grunde was ich meine. – Ryan