這大概是我最想殺了自己的其中一次案例,由於
Promise
的語法太久沒用,以致於在一場很期待的線上面試時,突然忘記語法怎麼寫,手忙腳亂地亂查資料然後最後還超時沒寫出來,當場想原地敲昏自己。
網上有太多案例解釋 Promise
在幹嘛,這邊就不再贅述,簡單來說就是用 Promise
建立一個非同步運算的最終完成或失敗的物件,再更簡單一點就是要『發出一個承諾,這件事情做完了(無論成功失敗),我才要你做下一件事情』,網上最常見的應該就是點餐案例了。
那怎麼用呢?
我們先建立三個 Prpmise
plaintext
1 | const promise1 = new Promise((resolve, reject) => { |
then()爆他
最簡單的應用方式,就是一直 then()
下去
plaintext
1 | promise1.then((value) => { |
結果應該是
plaintext
1 | "get promise1" |
用這樣的方法應該就可以依序拿到三個 Promise
了
要注意如果沒有 then()
的話,假設直接呼叫 console.log("promise1", promise1);
你只會拿到
plaintext
1 | "promise1" //[object Promise]; |
這是 Promise
最基礎的用法,也避免了可怕的 callback hell
我不在乎順序,我全都要
如果你跟 豹頭 一樣,不在乎順序,只想全都要的話,那 Promise.all( […] )
可能會幫上你
一樣的剛剛那三個 Promise
plaintext
1 | function promiseAll (){ |
意思就是我不在乎誰先誰後,我要你們全都好了再來跟我說 (慣老闆),這樣你應該會拿到一次全好的結果匯報。
plaintext
1 | "get promise1, get promise2, get promise3" |
then()還是好醜怎麼辦…(你才醜你全家都醜)
Async / Await 是 ES7 才出現的語法糖,其中一大特點就是讓「非同步的程式碼」讀起來更像在寫「同步程式碼」,跟 Promise
基本上做一樣的事,只是經過包裝讓可讀性跟維護性都更好一點。
plaintext
1 | async function asyncFunc (){ |
然後就會得到跟 then()
爆他一樣類似的結果,一個一個依序拿到了
plaintext
1 | "await Promise1" "get promise1" |
最後希望我還是能拿到面試邀約嗚嗚嗚
參考資料: