【零基礎】簡易JavaScript #8-API 孖寶 fetch及async await

輕鬆學會JS、HTML 5、CSS 3 — 寫出港鐵到站時間網頁

Panda Man
6 min readFeb 9, 2021

在工作面試時,fetch和async await經常被問到!因為它們用作呼叫API,背後也有運作原理,可以考驗應徵者是否真的了解。

今次我嘗試用講故事的方法,希望大家明白吧Awwwww

本集重點:

  • JavaScript 連接API工具 — fetch
  • API 延時問題
  • 故事例子 — foodpanda叫譚仔
  • JSON運作解說

JavaScript 連接API工具 — fetch

在JavaScript 世界中,我們沒有Browser 可以放入API 網址,也不可能按Enter 去拿資料。所以我們要用一個指令 — fetch。

格式十分簡單,fetch加上(),中間放入API網址,用引號括着。如果用真實的港鐵API就是 — fetch( 'https://rt.data.gov.hk/v1/transport/mtr/getSchedule.php?line=AEL&sta=HOK' )。

你會問:「你不是說很多運作原理嗎?」其實最後寫完成也只是以下這5行,但多了fetch、async await、json() 這三個不明物體(?)。

async function (){
const res = await fetch(‘https://rt.data.gov.hk/v1/transport/mtr/getSchedule.php?line=AEL&sta=HOK’)
const json= await res.json()
document.getElementById(‘ message ‘).innerHTML=json.data
}

第一行是叫fetch連接外部伺服器拿資料,放進res這個變數;
第二行,將拿回來的資料轉換格式;
第三行是把可用的資料抽入HTML。

稍等!那async await 是什麼?.?

API 延時問題

async await 的出現,是因為連接API 的時候,我們可能需要等待。以我們的案例來說,假設我們的網頁很順暢,但萬一港鐵API回資料要 10秒鐘,怎辦?

假設javascript 檔第10行是API,下面還有1000行資料,那是不是在第10行等10秒才繼續餘 989行的資料?如果API沒有回應,是不是要等到海枯石爛?

JavaScript是隻沒有腳的小鳥,它不會停下。

async await 就像一個標示,提醒某一行程式需要等待,JavaScript 派人去領取資料後,可以先跳過這句,到API 有回應的時候再回來。

故事例子 — foodpanda叫譚仔

第一步:你拿起手機看譚仔MENU,等於開始進入function 。

第二步:你決定要吃「勿演米線」按付款。等於執行fetch。

第三步:你不用自己親自到譚仔等,於是你可以去唱歌去sit up。在JavaScript層面等於你跳出這個Function外,先處理其他程序。

第四步:外送員到了你家門口,放下用膠袋包好的「勿演米線」。等於資料終於回來,用res這個variable內,就回到function 內繼續下一行。

第五步:由於你太懶的關係,於是大聲呼叫媽媽幫忙,將食物從膠袋中拿出,放進平日用的碗內。但媽媽不會急着幫你,所以你又要等一下!

第六步:然後,你就繼續唱歌。在JavaScript層面等於你跳出這個Function外。

第七步:最後,媽媽把米線放進你的碗內,你就可以吃了。JavaScript的資料準備好,可以放進HTML內。

假設,如果沒有async await 的話,會發生什麼事呢?這就等於你最後會吃空氣。

JSON運作解說

剛剛故事中提到叫媽媽幫忙,將食物從膠袋中拿出「拆膠袋」的情節,到底是什麼呢?

原因是在伺服器回來的資料,格式是一種叫JSON的東西,需要轉換才能使用。你可以假想,一碗「勿演米線」需要用膠袋包好才送出,foodpanda 不會把一碗米線直接送去你家。

JSON — JavaScript Object NotationObject
const obj={a:1, b:2 , c:”panda” }
JSON
{“a”: 1 , ”b”:2 , ”c”: ”panda” }
(JSON的格式會叫object中的KEY以雙引號括着,相比起以往CSV和TSV等格式省位置,想了解的朋友請到 https://www.json.org/json-en.html)
作者的話 (可以略過)「我要控制科技,而不是被科技控制我!」感謝您看我的文章。
我原本是一個新聞記者,但年近30,開始感到迷惘。
於是報讀了Coding Bootcamp,3個多月成功轉職「軟件工程師」。
很多朋友問我到底難不難?
我嘗試運用記者經驗,將問題深入淺出,簡短地讓沒有經驗的你,感受一下Programming適不適合自己。
另一個目的,我希望累積教學經驗。
日後有手足要幫忙,我可以幫到。
即使沒有財力開公司請人,也希望授之以漁。
所以有問題請留言,我也希望知道自己哪裏講得不夠好。
▲▲香港 時代▲▲

--

--

Panda Man
Panda Man

Written by Panda Man

前媒體人,年近30,在迷茫的人生路上渾渾噩噩。在媒體環境變得喘不過氣之時,卻發現科技潮流勢不可擋。 最後「裸辭」讀Programming,竟然成功轉職為Developer,開創了第二人生。

No responses yet