異步與很多其他

Javascript語(yǔ)言的執(zhí)行環(huán)境是“單線程”,Javascript語(yǔ)言將任務(wù)的執(zhí)行模式分成兩種:同步和異步。

  • “同步模式”就是上一段的模式,后一個(gè)任務(wù)等待前一個(gè)任務(wù)結(jié)束,然后再執(zhí)行,程序的執(zhí)行順序與任務(wù)的排列順序是一致的、同步的;
  • "異步模式"則完全不同,程序的執(zhí)行順序與任務(wù)的排列順序是不一致的、異步的。
  • "異步模式"非常重要。在瀏覽器端,耗時(shí)很長(zhǎng)的操作都應(yīng)該異步執(zhí)行,避免瀏覽器失去響應(yīng),最好的例子就是Ajax操作。

下面看阮一峰的異步編程的四種方法:

一、回調(diào)函數(shù)

把函數(shù)作為參數(shù)傳入到另一個(gè)函數(shù)中。這個(gè)函數(shù)就是所謂的回調(diào)函數(shù)。
假設(shè)有兩個(gè)函數(shù),f1很耗時(shí),在同步模式下,f2只能等f(wàn)1執(zhí)行完畢后再執(zhí)行

function f1(){console.log(1)}
function f2(){console.log(2)}
f1()
f2()
//1
//2

如果我們希望f2在f1執(zhí)行結(jié)束后立刻執(zhí)行

function f2(){console.log(2)}
function f1(callback) {
  console.log(1)
  callback()
}
f1(f2)
//1
//2

setTimeout()函數(shù)支持異步處理,如果我們希望f1延遲執(zhí)行

function f2(){console.log(2)}
function f1(callback){
  setTimeout(function() {console.log(1)}, 1000)
  callback()
}
f1(f2)
//2
//1
二、事件監(jiān)聽

異步任務(wù)的執(zhí)行不取決于代碼的順序,而取決于某個(gè)事件是否發(fā)生。

三、發(fā)布/訂閱

我們假定,存在一個(gè)"信號(hào)中心",某個(gè)任務(wù)執(zhí)行完成,就向信號(hào)中心"發(fā)布"(publish)一個(gè)信號(hào),其他任務(wù)可以向信號(hào)中心"訂閱"(subscribe)這個(gè)信號(hào),從而知道什么時(shí)候自己可以開始執(zhí)行。

四、promise

看promise

另外,ES2017 標(biāo)準(zhǔn)引入了 async 函數(shù),使得異步操作變得更加方便。

五、async
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 異步 我對(duì)異步的理解: 異步是不等結(jié)果,往下執(zhí)行;同步是等結(jié)果出現(xiàn)后,再往下執(zhí)行 代碼中出現(xiàn)異步程序時(shí),如例2中,...
    astak3閱讀 475評(píng)論 0 0
  • 異步代碼的特點(diǎn):書寫順序與執(zhí)行順序不同。 上面代碼的書寫順序是1->2->3,但執(zhí)行順序是1->3->2。中間的s...
    毛毛獨(dú)角獸閱讀 634評(píng)論 0 0
  • 1. 同步 等自己這行代碼任務(wù)執(zhí)行完了得到結(jié)果,再執(zhí)行下一行,叫做同步 2. 異步 不等自己這行代碼運(yùn)行完,直接運(yùn)...
    彭奕澤閱讀 160評(píng)論 0 0
  • 異步 維基百科解釋 異步IO是計(jì)算機(jī)操作系統(tǒng)對(duì)輸入輸出的一種處理方式:發(fā)起IO請(qǐng)求的線程不等IO操作完成,就繼續(xù)執(zhí)...
    黃同學(xué)2019閱讀 1,959評(píng)論 0 0
  • 周六的清晨,一切都安安靜靜、從容不迫。手術(shù)后的菲利逐漸恢復(fù)、曾經(jīng)半死不活的貓草重?zé)ㄉ鷻C(jī)。 冥想完畢,睜開眼睛,看到...
    闌干遍拍閱讀 222評(píng)論 0 0

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