promise

Js語言的執(zhí)行環(huán)境是“單線程”就是指一次只能完成一個任務(wù),如果有多個任務(wù),就必須排隊,前面一個任務(wù)完成,再執(zhí)行后面一個任務(wù),以此類推。
單線程的好處是實現(xiàn)起來比較簡單,執(zhí)行環(huán)境相對單純,壞處是只要有一個任務(wù)耗時很長,后面的任務(wù)都必須排隊等著,會拖延整個程序的執(zhí)行。
js分同步模式和異步模式,異步模式,么個任務(wù)有一個或多個回調(diào)函數(shù),前一個任務(wù)結(jié)束后,不是執(zhí)行后一個任務(wù),而是執(zhí)行回調(diào)函數(shù),后一個任務(wù)則是不等前一個任務(wù)結(jié)束就執(zhí)行,所以程序的執(zhí)行順序和任務(wù)的排列順序使不一致的、異步的。

處理異步有幾種常見的方式

  • 回調(diào)模式
function f1(callback){
setTimeout(function(){
//f1的任務(wù)代碼
callback()

},1000)
}
//執(zhí)行代碼就變成:f1(f2)
  • 回調(diào)函數(shù)的有點是簡單,容易理解和部署,缺點是不利于代碼的閱讀和維護(hù),各個部分之間高度耦合,流程會很混亂,而且每個任務(wù)只能指定一個回調(diào)函數(shù)。
  • 事件監(jiān)聽:采用事件驅(qū)動模式。任務(wù)的執(zhí)行不取決于代碼的順序,而取決于某個事件是否要發(fā)生。
f1.on('done',f2)
//當(dāng)f1發(fā)生done事件,就執(zhí)行f2,然后對f1進(jìn)行改寫
functjion f1(){
setTimeout(function(){
//f1的任務(wù)代碼
f1.trigger('done')
},1000)
}
//這種方法的優(yōu)點是,可以綁定多個事件,每個事件可以指定多個回調(diào)函數(shù),而且可以“去耦合”,有利于實現(xiàn)模塊化。缺點是整個程序都編程事件驅(qū)動型,運行流程會變得很不清晰。
  • 發(fā)布訂閱:假定存在一個“信號中心”,某個任務(wù)執(zhí)行完成,就向信號中心“發(fā)布”一個信號,其他任務(wù)可以向信號中心“訂閱”這個信號,從而指導(dǎo)什么時候自己可以開始執(zhí)行。這就叫做發(fā)布訂閱模式
//首先f2向信號中心jQuery
訂閱done信號
jQuery.subscribe("done",f2)
//然后進(jìn)行如下改寫
function f1(){
setTimeout(function(){
//f1的任務(wù)代碼
jQuery.publish("done")
},1000)
}
//jQuery.publish('done')的意思是,f1執(zhí)行完成后,向信號中心jQuery發(fā)布done信號,從而引發(fā)f2的執(zhí)行。
此外,f2完成執(zhí)行后,也可以取消發(fā)布訂閱
jQuery.unsubscribe("done",f2)
//這種方法的性質(zhì)與“事件監(jiān)聽”類似,但是明顯優(yōu)于后者。因為可以通過查看消息中心,了解存在多少信號,每個信號有多少訂閱者,從而監(jiān)控程序的執(zhí)行

promise 是什么

Promise 對象是 JavaScript 的異步操作解決方案,為異步操作提供統(tǒng)一接口。它起到代理作用(proxy),充當(dāng)異步操作與回調(diào)函數(shù)之間的中介,使得異步操作具備同步操作的接口。Promise 可以讓異步操作寫起來,就像在寫同步操作的流程,而不必一層層地嵌套回調(diào)函數(shù)。
Promise 并不能消滅回調(diào)地獄,但是它可以使回調(diào)變得可控
最后編輯于
?著作權(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)容

  • Promise 是 JavaScript 異步操作解決方案。介紹 Promise 之前,先對異步操作做一個詳細(xì)介紹...
    許先生__閱讀 465評論 0 1
  • 什么是同步異步 同步:當(dāng)我們發(fā)出了請求,并不會等待響應(yīng)結(jié)果,而是會繼續(xù)執(zhí)行后面的代碼,響應(yīng)結(jié)果的處理在之后的事件循...
    liwuwuzhi閱讀 516評論 1 1
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 11,134評論 26 95
  • 編后吐槽:寫的快花眼,很詳細(xì),耐心看必受益匪淺 JavaScript的執(zhí)行環(huán)境是「單線程」的。所謂單線程,是指JS...
    果汁涼茶丶閱讀 4,763評論 8 27
  • “ 約21:18是鑰節(jié),是預(yù)言,使徒行傳是結(jié)果,抗衡的對象是約翰雅各兄弟倆。 在門徒中爭老大的彼得,經(jīng)歷了復(fù)活的主...
    丁恩慈閱讀 734評論 0 3

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