Promise又一個異步編程解決方案?!

前言

在NodeJS開發(fā)中,各種異步操作是不可避免的(好吧,這句明顯是廢話...)。
開發(fā)人員在異步編程上有各種各樣的解決方案可以選擇。我之前一直用的是: Async這個庫(star數(shù)量已經(jīng)上萬了)。但是,最近看到很多關(guān)于Promise的介紹,甚至連ES6里面都內(nèi)置了這個東西。感覺自己不會用都有點不好意思...

Promise

之前其實看過一點Promise相關(guān)的內(nèi)容,但是并不喜歡它處理異步操作的方式(各種Promise對象),所以就一直拖延下去了...
現(xiàn)在馬上就要過春節(jié)了,手頭的事情也少了很多,就抽了點時間看了下。

教程地址

Promise已經(jīng)出來有一段時間了,很多公司的技術(shù)團(tuán)隊博客里面也都寫了不少它的教程:

  1. 百度的EFE團(tuán)隊
  2. 美團(tuán)的技術(shù)團(tuán)隊

所以我也沒必要再重復(fù)的造輪子了,這里推薦很不錯教程,有點循序漸進(jìn)的味道:
http://liubin.org/promises-book/

看了這篇教程之后,再對比著看看前面兩個博客的地址,理解起來會更加全面。

筆記

  1. Promise.resolve(42); 是以下代碼的語法糖。
 new Promise(function(resolve){
    resolve(42);
 });
  1. then中指定的方法調(diào)用是異步進(jìn)行的。 then接受的是函數(shù)!如果是其它類型的數(shù)據(jù),promise會忽視掉。

  2. 每個方法中 return 的值不僅只局限于字符串或者數(shù)值類型,也可以是對象或者promise對象等復(fù)雜類型。
    return的值會由 Promise.resolve(return的返回值); 進(jìn)行相應(yīng)的包裝處理,

  3. catch只是 promise.then(undefined, onRejected) 的別名而已。
    推薦用這種寫法:promise.then(onFulfilled).catch(onRejected) 因為onRejected方法不能捕獲同一個then方法中的onFulfilled的異常。很好理解。

吐槽

Promise給我的印象,其實并不好,目前應(yīng)該也不會馬上把它用到項目里面來。一方面是因為Async用的非常順手,而Promise功能非常有限,特別是遍歷Promise對象數(shù)組的時候。在Async模塊中有各種各樣的方法:each、series、reduce、parallel...
而用Promise來實現(xiàn)這些功能,就有點復(fù)雜了,不過也有第三方庫在于Promises規(guī)范上,添加了不少功能。比如:

  1. bluebird : https://github.com/petkaantonov/bluebird
  2. q : https://github.com/kriskowal/q

大家可以選一個看著順眼的來用。
最主要的原因還是因為:Promise處理異步操作,最底層就是靠回調(diào)函數(shù),但是它硬是搞了一層嵌套,把每一個異步操作都封裝為一個Promise對象,淡化回掉的概念。這理解起來就真的沒那么順暢了...


哦,對了。在ES7中支持了async和await關(guān)鍵字,貌似與Promise更配。
之后有空,再看看吧。(這個async和提到的Async模塊可不是同一個東西!??!

本文同步發(fā)表在個人網(wǎng)站xtutu.me

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你不知道JS:異步 第三章:Promises 在第二章,我們指出了采用回調(diào)來表達(dá)異步和管理并發(fā)時的兩種主要不足:缺...
    purple_force閱讀 2,261評論 0 4
  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗的人,如果你還沒有使用過Promise,這篇文章可能不適合你,...
    HZ充電大喵閱讀 7,468評論 6 19
  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)...
    夜幕小草閱讀 2,230評論 0 12
  • Promiese 簡單說就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作)的結(jié)果,語法上說,Pr...
    雨飛飛雨閱讀 3,494評論 0 19
  • 前言:機(jī)緣巧合,當(dāng)走到北門的時候,發(fā)現(xiàn)今天原來是北龍口大集,來學(xué)校已經(jīng)兩年了,從大一的時候就和舍友說好要去趕集,但...
    hhf素閱讀 534評論 4 1

友情鏈接更多精彩內(nèi)容