<aside> 💡 await 後面要接的是 promise。不論是自己建的,或是async function的回傳都可以。但不能放一個未執行的async function

</aside>

Promise

想像一個歌手,他有一堆粉絲,粉絲成天問他啥時要出新專輯,於是歌手就向粉絲們promise說:你們在網頁上填入email,只要我一出新專輯,馬上用email通知你們!

如此一來,大家都開心:歌手不會一直被吵、粉絲不會擔心錯過新專輯,即便工作室出了意外粉絲也會馬上知道

傳到promise裡的function稱作executor(producing code),當 promise 被 new 的時候,executor會自動執行。

executor需傳入兩個參數,resolve 跟 reject,這兩個都是 call back function。但這兩個 functions 已經由JavaScript引擎是先定義好,我們不用自己寫 ,我們只要call他就好

當executor執行完,有結果時,就會呼叫resolve 與 reject其中一個function

在promise被new的時候,會有一個state跟一個result

result一開始(executor執行完畢之前)是undefined、result是pending

executor成功的話,state變成fulfilled、result變成某個value