※ 認識非同步概念(一)

閱讀時間約 3 分鐘

※ 同步概念:

單純地「由上而下」執行程式碼,而且一次只執行一件事,也就是「按順序執行,一個動作結束才能切換到下一個」。缺點是你需要「等待」事情執行完畢,才能繼續往下走。

※ 非同步概念:

盡可能讓主要的執行程序不需要停下來等待,若遇到要等待的事情,就發起一個「非同步處理」,讓主程序繼續執行,等到該操作執行完畢時,再回頭通知主程序,並交付處理結果。

raw-image


為了讓管理非同步的程式碼變得更簡單,語法上主要使用Promise 和 async/await ,來寫出非同步式的程式碼。

raw-image

※ 非同步注意事項:

  • JavaScript 只是擅長用非同步的方式在不同事情間「切換」,它的本質仍然是一次執行一件事 (single thread)。
  • 由於迴圈是同步執行的機制,因此不要設計一個需要跑很久的迴圈,讓程式卡住 (blocking),讓使用者陷入空等。

※ Callback function概念:

CallBack的定義:一個程式執行完再去執行另一個程式。

Callback 的必要條件:

  1. 讓函式成為另一個函式的參數:允許函數接收另一個函數作為參數,意思是允許我們將特定的行為(透過回調函數Callback)傳入到另一個函數中,並在適當的時候執行這些行為。
function A(Fn) {
console.log('Hello')
Fn()
}

function B() {
console.log('Good')
}

A(B); // 直接將 B 函數作為參數傳遞給 A

說明:

  • 當 A(B) 被調用時,B 函數當成參數被傳遞給了 A。在 A 函數內部,參數 Fn 接收到了 B 的引用。因此,當 A 內部執行 Fn() 時,它實際上是在調用 B。
  1. 讓函式控制參數函式的執行時機:意思是回調函數的執行並不是立即進行的,而是由接收回調的函數根據某些條件(如事件發生、異步操作完成等)來決定何時執行。這對於非同步來說尤其重要,例如在 JavaScript 中處理 HTTP 請求、讀取文件操作等。
function A () {
setTimeout(function() {
console.log('Hello')
}, 5)
}

function B () {
console.log('Good')
}
function C () {
console.log('Good Morining')
}
A()
B()
C()

說明:

  • 函數 A: 因為 setTimeout 本身是非同步的函式。在設定這 5 毫秒的延時內,JavaScript 不會等待,它會繼續執行後面的代碼,等到 5 毫秒到了,再切回來執行 setTimeout 裡的 console.log('hello')
  • 函數 B和函數 C立即印出"Good"和"Good Morning",都是一個同步操作在呼叫 B()(C)時就立即執行。
  • 因此,即使 setTimeout 在 A() 中設定了非常短的延遲,B() 和 C() 的輸出還是會在 setTimeout 的回調函數之前執行。

輸出的順序會是:

  1. "Good"
  2. "Good Morining"
  3. "Hello"


    全端網頁開發專業知識分享
    留言0
    查看全部
    發表第一個留言支持創作者!
    認識 JavaScript (十)
    閱讀時間約 1 分鐘
    認識 JavaScript (十一)
    閱讀時間約 2 分鐘
    認識 JavaScript (十二)
    閱讀時間約 4 分鐘
    認識 JavaScript (十三)
    閱讀時間約 1 分鐘
    認識 JavaScript (十四)
    閱讀時間約 3 分鐘
    認識 JavaScript (十五)
    閱讀時間約 9 分鐘
    你可能也想看
    創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
    Thumbnail
    avatar
    黑貓老師
    2024-06-29
    認識使命。 (非宗教)透過擁有使命時的感受,以及其感受作為基底的來源,使用自己的生命。 下限有希特勒作為借鏡,上限有帶領AI作為發展前沿,縱使還不熟悉,也早晚會在過程中認識使命。
    avatar
    始力拼達人
    2024-02-07
    快速認識阿拉伯文字母與變形體(非專業教學)本文解惑阿拉伯文為何看起來像一條蟲,並介紹阿語字母與變形體。
    Thumbnail
    avatar
    雪莉思 Sherry
    2023-09-10
    13天日本深度旅行:飛驒高山基本篇 ──帶你一次掌握好吃好玩,認識飛驒高山全貌!大家來日本旅行前可能都只聽過合掌村,卻沒什麼聽過合掌村周遭的城市,但其實在合掌村附近有一個名叫飛驒高山的城市,這個城市既有像鄉村般的古色古香和樸素氛圍,又同時兼具都市般的熱鬧和方便,而且美食和景點夠你逛三天三夜!這次就要帶大家以簡單清楚的方式,體驗高山好吃好玩的景點和美食,並讓大家認識高山這個地方!
    Thumbnail
    avatar
    Kenny的隨手日誌
    2023-08-17
    菲菲心靈:自我認識的深化經常忽略了自己內在深處的聲音 在這快節奏的現代生活中,我們總是被迫奔波於各種工作、學習和家庭事務之間。這種忙碌使我們往往忽略了內在深處的聲音,忘記了自己的真正渴望和內心的需求。每天的壓力讓我們只能應付眼前的困難,卻忘了細細品味生活的真諦。 在城市的喧囂中,我們忘記了自己 在城市的喧囂中,我們很
    Thumbnail
    avatar
    月菲
    2023-07-31
    擴大你對英文句型的認識(下):主詞+be動詞然後可以接什麼?【英語能力起飛】在(上)時我們從「I am _____ .」開始,引導讀者一路來到了句型「主詞+be+介詞片語」,本篇(下)要跟讀者分享常用和好用的例句,同時邀請付費訂閱的讀者透過留言功能挑一個或本文提到的所有例子來造句,老師會幫揪錯。 首先分享一個描述位置的實用句型。請看: 可拿來形容自己住的地方交通有多便利:
    Thumbnail
    avatar
    英語能力起飛
    2022-04-18
    avatar
    英語能力起飛
    2022-04-14
    你真的認識聖索菲亞大教堂嗎?世界級大師帶你導覽經典建築景點!位於伊斯坦堡的聖索菲亞大教堂,是到土耳其旅遊時必去的景點,但除了歷史課本上有學過的拜占庭歷史外,你對這座建築了解嗎? 今天透過世界級建築師羅伯特‧麥卡特以及2018威尼斯建築展「田中央工作群」的策展顧問尤哈尼‧帕拉斯瑪,帶你「紙上VR導覽」聖索菲亞大教堂這座既熟悉又陌生的建築吧!
    Thumbnail
    avatar
    原點出版社
    2021-08-30
    [阿飛的人生相談所]第17集:認識很久卻還不懂我!這該怎麼辦?「阿飛的人生相談所」,故名思義就是聊人生的各種問題,我會在這裡用聲音跟讀者聊聊日常生活的大小事,也會開放讀者留言與來信提問,無論是感情上、工作上或是家庭、人際關係的問題都可以留言或來信問我,然後我會從中挑選適合的問題在音頻聊聊我的看法,當然不想問問題,單純留言給我鼓勵,我也非常開心。
    Thumbnail
    avatar
    阿飛
    2020-12-27
    認識菲律賓股市及法規淺談菲律賓股市及相關法規
    Thumbnail
    avatar
    Rae Kuo 瑞瑞
    2020-11-25
    認識「結構化/半結構化/非結構化」資料結構化資料: 事先定義好每個欄位可以存放什麼資料,這種儲存的資料就是結構化資料。 像是關聯式資料庫中的資料,需要先把table欄位定義好,之後才能儲存資料。 半結構化資料: 無需事先定義好資料欄位,每一筆資料能夠根據需求儲存不同的欄位,因此很有彈性,如JSON, XML等等。 非結構化資料: 未整理
    avatar
    Vic Lin
    2020-10-09