[Javascript] 非同步處理: Promise

Promise / MDN
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise

Promise外部函式庫議題
https://eyesofkids.gitbooks.io/javascript-start-es6-promise/content/contents/other_libs.html

從0到1實現Promise
https://segmentfault.com/a/1190000016550260

使用 bluebird 實現更強大的 Promise
https://www.ibm.com/developerworks/cn/web/wa-lo-use-bluebird-implements-power-promise/index.html

使用Javascript在處理非同步事件時,曾經的大部分方式都是靠回調(callback)的嵌套來實現的,然而這樣的方式容易導致程式碼出現非常多層的縮排,再加上業務代碼後,會使程式碼整體顯得臃腫且淩亂不堪。Promise的出現主要就是要解決這種地獄回調問題,Promise通過將非同步作業以同步操作的流程表達出來,使邏輯更加清晰,且Promise允許任何時候都可以得到這個非同步作業的結果,但回調不行。也就是說,回調事件觸發時,如果你沒有處於監聽狀態,那麼錯過了就再也得不到此次事件的結果,而Promise則是將結果狀態會凝固,等待你去觀察這個非同步作業的結果,再來決定怎麼接收結果。

需注意當前主流瀏覽器都已內建ES6 Promise,但IE11(含以下)通通不支援,Edge雖支援大部分,但不支援Promise的finally語法。若想讓瀏覽器的支援度更高,就得通過其他套件擴充,例如使用babel所使用的core-js、bluebird、jQuery的deferred等進行擴充Promise。


#Javascript, Promise, Promises/A+, ES6 Promise,  babel, core-js, jQuery, deferred, 非同步, 異步

留言