promise

函數(shù)的副作用

一個函數(shù)除了會返回一個值之外,還會修改函數(shù)以外的狀態(tài)如全局變量等等。

 var a = 4;
    function change(){
        a = 3;
    }
    change();
    console.log(a);//3

promise.all()

Promise.all()會以一個 promises 數(shù)組為輸入,并且返回一個新的 promise。這個新的 promise 會在數(shù)組中所有的 promises 都成功返回后才返回。他是異步版的 for 循環(huán)。一旦數(shù)組中的 promise 任意一個返回錯誤,Promise.all() 也會返回錯誤。并且 Promise.all() 會將執(zhí)行結(jié)果組成的數(shù)組返回到下一個函數(shù)。

忘記使用 .catch()

這是另一個常見的錯誤。單純的堅信自己的 promises 會永遠(yuǎn)不出現(xiàn)異常,很多開發(fā)者會忘記在他們的代碼中添加一個 .catch()。然而不幸的是這也意味著,任何被拋出的異常都會被吃掉,并且你無法在 console 中觀察到他們。這類問題 debug 起來會非常痛苦。

Promise 能被暫停

僅僅因為你已經(jīng)在一個 then() 函數(shù)中執(zhí)行過代碼,并不意味著你不能夠暫停 promise 去做其他事情。為了暫停當(dāng)前的 promise,或者要它等待另一個 promise 完成,只需要簡單地在 then() 函數(shù)中返回另一個 promise。

var = new Promise(/*...*/);   

    p.then(function(str){
        if(!loggedIn){
            return new Promise(/*...*/);
        }
    }) 
    .then(function(str){
        alert("Done!");
    });

在上面的代碼中,直到新的 promise 的狀態(tài)是 resolved解析后,alert 才會顯示。如果要在已經(jīng)存在的異步代碼中引入更多的依賴,這是一個很便利的方式。例如,你發(fā)現(xiàn)用戶會話已經(jīng)超時了,因此,你可能想要在繼續(xù)執(zhí)行后面的代碼之前發(fā)起第二次登錄。

最后編輯于
?著作權(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)容

  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)...
    夜幕小草閱讀 2,217評論 0 12
  • 英文:Nolan Lawson 譯文:伯樂在線專欄作者 - abell123如有好文章投稿,請點擊 → 這里了解...
    北方蜘蛛閱讀 6,336評論 1 10
  • Promiese 簡單說就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作)的結(jié)果,語法上說,Pr...
    雨飛飛雨閱讀 3,484評論 0 19
  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗的人,如果你還沒有使用過Promise,這篇文章可能不適合你,...
    HZ充電大喵閱讀 7,444評論 6 19
  • 在被石油覆蓋的海面下雙眼變成灰青色試圖言語剛一張嘴就喝進(jìn)一大口圣母的尿液手指僵直連抓住自己頭發(fā)的力氣都喪失掉了下體...
    NixNa閱讀 343評論 0 1

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