2025-02-17-非同步程式的執行順序
2025-02-17-非同步程式的執行順序
這個核心觀念,其實關係到 非同步程式的執行順序 ——也就是「事情不是馬上完成,要等做完再做下一件」,這正是 callback、async/await 要解決的問題。
🎯 你的問題:「為什麼不是從裡到外 call?」
你可能想像的是這樣寫:
1 | 完成(() => { |
這樣是「先寫最後一步,從裡面往外包」,但這樣其實會 先執行最外層,也就是「完成()」,但那時前面步驟根本還沒做!
💡 原因:JavaScript 的非同步邏輯是「事件驅動」
JavaScript 不會等事情做完才繼續跑下一行,它會先繼續往下跑,等到某個動作完成後,再「呼叫 callback」。
所以程式碼的寫法要跟「事情發生的順序」一樣:
1 | 買材料(() => { |
因為你得 先做完前面,才會進行下一步。
🧁 用生活比喻更好懂
假設你是蛋糕助手:
- 你先去買材料,買完了你就打電話通知「下一個人」。
- 「下一個人」接到電話後,開始攪拌,完了又通知「下一個人」。
- 然後才烤、切、包裝……
如果你一開始就打電話給「送蛋糕的人」,他會說:
❗️「欸我等你們做完蛋糕再通知我啦,我現在不能開始啦!」
✅ 總結
- callback 是照「完成順序」來寫的。
- 從外到內是因為「前面的事做完,才通知後面可以做」。
- 如果你寫從裡到外,會導致「還沒開始就想完成」,邏輯上不通。