--- id: javascript-async title: "JavaScript Async" category: "Frontend" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: ["Async programming", "JS async basics", "Synchronous vs asynchronous", "Async execution order", "Non-blocking code"] duplicate_of: "" source_trust_level: "B" confidence_score: 0.87 created_at: 2026-06-23 updated_at: 2026-06-23 review_reason: "" merge_history: [] tags: ["javascript", "js", "web", "frontend", "w3schools", "asynchronous", "settimeout"] raw_sources: ["https://www.w3schools.com/js/js_async.asp"] applied_in: [] github_commit: "" --- # [[JavaScript Async]] ## 🎯 ν•œ 쀄 톡찰 (One-line insight) JavaScript runs line by line by default, but async code can start a long-running task and keep working β€” so the visible order of results may differ from the source order. [S1] ## 🧠 핡심 κ°œλ… (Core concepts) - **Default execution is top-to-bottom, left-to-right** β€” JavaScript normally executes one line at a time in source order. [S1] - **Async reorders work** β€” async code lets a program start a long-running task (like fetching data from a file) and continue with other tasks before the first finishes, which can change the execution order. [S1] - **The result-not-ready problem** β€” reading an async result too early yields `undefined` because the async code has not finished yet. [S1] - **Async is not parallel** β€” parallel runs multiple things simultaneously on different processors; async switches between tasks without necessarily running them at the same time. [S1] - **Six building blocks** β€” synchronous flow, timers, callbacks, events, promises, and async/await. [S1] ## 🧩 μΆ”μΆœλœ νŒ¨ν„΄ (Extracted patterns) - **Order swap by call order** β€” calling `mySecond()` before `myFirst()` simply changes which output appears first; ordinary synchronous calls obey source order. [S1] - **Deferred call via setTimeout** β€” wrapping a call in `setTimeout(fn, ms)` pushes it after the synchronous lines, yielding A, C, B. [S1] - **Event-driven callback** β€” an HTML attribute like `onclick` wires user interaction to a function that runs later. [S1] ## πŸ“– μ„ΈλΆ€ λ‚΄μš© (Details) **Synchronous calls run in order** Plain calls produce output A, B, C: [S1] ```javascript myDisplayer("A"); myDisplayer("B"); myDisplayer("C"); ``` **Function order matters** Defining two functions and calling them in order: [S1] ```javascript function myFirst() { myDisplayer("Hello"); } function mySecond() { myDisplayer("Goodbye"); } myFirst(); mySecond(); ``` Swapping the call order swaps the output: [S1] ```javascript function myFirst() { myDisplayer("Hello"); } function mySecond() { myDisplayer("Goodbye"); } mySecond(); myFirst(); ``` **Asynchronous flow with setTimeout** The deferred `B` runs after the synchronous `C`, so the order is A, C, B: [S1] ```javascript myDisplayer("A"); setTimeout(function() { myDisplayer("B"); }, 1000); myDisplayer("C"); ``` **The result-not-ready trap** The result is `undefined` because the async code has not finished yet: [S1] ```javascript let result; setTimeout(function() { result = 5; }, 1000); // What is result here? ``` **JavaScript events** Events wire callbacks to user interaction: [S1] ```javascript ``` **Core async concepts** [S1] | Concept | Description | |---------|-------------| | Synchronous | The JavaScript standard flow is executing line by line | | Timers | Allows code to run while other code is waiting | | Callbacks | Callbacks were the first solution for async JavaScript | | Events | Stores a callback function waiting to be executed | | Promises | Tools to handle asynchronous operations cleanly | | Async/Await | The clean and modern way to handle async code | **Asynchronous vs parallel** Parallel means doing multiple things at the same time on different processors. Asynchronous means switching between tasks, not necessarily running them simultaneously. [S1] **Restaurant analogy** Place your order (async call); sit down and do other things while the chef makes it; the server brings the food (the callback). [S1] ## πŸ› οΈ 적용 사둀 (Applied in summary) The page's own snippets β€” ordered/reordered function calls, the deferred A/C/B `setTimeout`, the `undefined` result trap, and the `onclick` event button β€” are the canonical applied examples. No external project/commit applications found in the source. ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code patterns) Deferred execution that reorders output (language: JavaScript): ```javascript myDisplayer("A"); setTimeout(function() { myDisplayer("B"); }, 1000); myDisplayer("C"); ``` Event-driven callback: ```javascript ``` ## βš–οΈ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & updates) No contradictions found in the source. ## βœ… 검증 μƒνƒœ 및 신뒰도 - **μƒνƒœ:** draft - **검증 단계:** conceptual (μ‹€μ œ 적용 사둀 발견 μ‹œ applied/validated둜 승격 κ°€λŠ₯) - **좜처 신뒰도:** B (W3Schools β€” widely used educational reference, not a primary standards body) - **μ‹ λ’° 점수:** 0.87 - **쀑볡 검사 κ²°κ³Ό:** μ‹ κ·œ 생성 (New discovery) ## πŸ”— 지식 κ·Έλž˜ν”„ (Knowledge Graph) - **μƒμœ„/루트:** [[JavaScript Tutorial]] - **κ΄€λ ¨ κ°œλ…:** [[JavaScript Asynchronous]], [[JavaScript Async Timeouts]], [[JavaScript Async Callbacks]], [[JavaScript Promise]] - **μ°Έμ‘° λ§₯락:** The foundational lesson establishing why execution order matters before introducing timeouts, callbacks, and promises. ## πŸ“š 좜처 (Sources) - [S1] W3Schools β€” JavaScript Async β€” https://www.w3schools.com/js/js_async.asp ## πŸ“ λ³€κ²½ 이λ ₯ (Change history) - 2026-06-23: Initial draft synthesized from the W3Schools "JavaScript Async" page (Astra wiki-curation, P-Reinforce v3.1 format).