Promise又一個(gè)異步編程解決方案?!

前言

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

Promise

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

教程地址

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

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

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

看了這篇教程之后,再對(duì)比著看看前面兩個(gè)博客的地址,理解起來(lái)會(huì)更加全面。

筆記

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

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

  3. catch只是 promise.then(undefined, onRejected) 的別名而已。
    推薦用這種寫(xiě)法:promise.then(onFulfilled).catch(onRejected) 因?yàn)閛nRejected方法不能捕獲同一個(gè)then方法中的onFulfilled的異常。很好理解。

吐槽

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

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

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


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

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

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

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

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

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