Naprawdę walczę tutaj, aby poradzić sobie z pisaniem asynchronicznego JavaScriptu. Czy mógłbyś podać przykład prostego funkcji JavaScript, która jest asynchroniczny napisany w czystym JavaScript (a nie przy użyciu node.js lub JQuery)Jaki jest prosty przykład asynchronicznej funkcji javascript?
Odpowiedz
Sam JavaScript jest synchroniczny i jednowątkowy. Nie możesz napisać funkcji asynchronicznej; zwykły JS nie ma interfejsu czasowego API. Nie będzie efektów ubocznych z równoległych wątków.
Co można zrobić, to korzystać z niektórych funkcji API dostarczanych przez danego środowiska (node.js przeglądarka internetowa), które pozwalają na planowanie zadań za pomocą asynchronicznych - limity czasu, AJAX, FileAPI, requestAnimationFrame
, nextTick
, WebWorkers, wydarzenia dom, cokolwiek.
Przykładem korzystania setTimeout
(dostarczonego przez HTML Timing API):
window.setTimeout(function() {
console.log("World");
}, 1000);
console.log("Hello");
Update: Od ES6 są obietnice jako asynchroniczny prymitywny wbudowane w prostym JavaScript, więc można zrobić
Promise.resolve("World").then(console.log); // then callbacks are always asynchronous
console.log("Hello");
Jednak same w sobie nie są pomocne, gdy nie ma na co czekać (np. Limitu czasu). I nic nie zmieniają również w modelu wątków, wszystkie wykonania są wykonywane od początku do końca bez żadnych zakłóceń.
Dobra odpowiedź, ale czy był to przykład użycia 'bind' naprawdę konieczny? Może zmylić OP jeszcze bardziej ... – bfavaretto
+1, bardzo prawdziwe; Zadania "asynchroniczne" są po prostu przesunięte w kolejce wykonawczej. Stąd też (czasem) przydatna sztuczka z 'setTimeout (func, 0)'.) – raina77ow
@bfavaretto: Nie chcę powtórzyć odpowiedzi Xeano. Zmieniono teraz, aby zmniejszyć zamieszanie :-) – Bergi
To asynchroniczny:
setTimeout(function(){
console.log('1');
}, 2000);
console.log('2');
2 będą zapisywane do konsoli before 1. Ponieważ setTimeout jest asynchroniczne.
Oto jeden bardzo prosty przykład:
for (var i = 0; i < 10; i++) {
window.setTimeout(function() {
console.log(i);
}, 2000);
}
Można oczekiwać te console.log()
wzywa pokazać 0, 1, 2
itd., Tak jak w tym fragmencie:
for (var i = 0; i < 10; i++) {
console.log(i);
}
Ale w rzeczywistości tylko 10
s będzie wydrukowane! Dlatego, że funkcje przeszedł do setTimeout
funkcji (jak jego „zwrotnego” argument) zostanie wywołany pofor
pętla zostanie zakończona - czyli po i
wartość jest ustawiona na 10.
Yet należy rozumieć jedno: wszyscy JavaScript w przeglądarce działa na jednym wątku; Zdarzenia asynchroniczne (takie jak kliknięcia myszy i liczniki czasu) są uruchamiane tylko wtedy, gdy w kolejce wykonawczej jest otwór. Oto a brilliant article napisane przez Johna Resiga na ten temat.
Problem z pętlą jest problemem z zakresu, a nie z powodu jego asynchronicznej natury. Jeśli byłyby prawidłowo ustawione, pętla działałaby zgodnie z oczekiwaniami. Chociaż jest to dobre wyjaśnienie funkcji przekazywanych do 'setTimout' wykonujących _ po tej samej pętli' for'a – Ian
- 1. Jaki jest prosty przykład błędu zmiennoprzecinkowego/zaokrąglania?
- 2. Javascript: Powrót obietnicę wewnątrz funkcji asynchronicznej
- 3. prosty przykład użycia require.js
- 4. Przetwarzanie pętli asynchronicznej JavaScript
- 5. MVC3 DropDownListFor - prosty przykład?
- 6. Prosty przykład użycia ast.NodeVisitor?
- 7. Prosty przykład KVO
- 8. ReactiveSwift Prosty przykład
- 9. v4l2 bardzo prosty przykład
- 10. listfragment prosty przykład
- 11. Algorytm wspinaczki górskiej prosty przykład
- 12. SQLAlchemy Generic Relationship prosty przykład
- 13. WPF - animacja sekwencyjna prosty przykład
- 14. Prosty przykład ArcGIS dynamicznie renderujący znacznik
- 15. Jaki jest przykład nieprawidłowej przeceny?
- 16. Qt: Prosty przykład dla Quazip
- 17. Czy istnieje prosty, ale użyteczny przykład jquery.JsPlumb?
- 18. Prosty przykład intencji i pakietu
- 19. OpenLayers 3: prosty przykład LineString
- 20. Prosty przykład reifikacji w RDF
- 21. Wywołanie funkcji asynchronicznej wewnątrz pętli
- 22. Prosty przykład użycia procesora w SBCL
- 23. Bauerca drag-sort-ListView prosty przykład
- 24. sqlalchemy prosty przykład `sum`` average` `min`` max`
- 25. Zrozumienie C++ regex przez prosty przykład
- 26. Wiązanie Crystal C, prosty przykład Witaj świecie.
- 27. Jaki jest cel parametru o nazwie "niezdefiniowany" w funkcji JavaScript?
- 28. Jaki jest typ funkcji kontrolera typu flow javascript?
- 29. Oczekujcie jest zarezerwowanym błąd słowo wewnątrz funkcji asynchronicznej
- 30. Prosty przykład scatterplot w D3.js?
'setTimeout' ??? – Bergi
Program obsługi zdarzeń. –
@SLaks odczytują odpowiedź Bergi. To w zasadzie to, o czym mówię. – Ryan