成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

異步與回調(diào)

NusterCache / 2398人閱讀

摘要:例子下面的程序,,,,它會(huì)按照順序從上往下的順序執(zhí)行,就是同步。

異步

我對(duì)異步的理解:

異步是不等結(jié)果,往下執(zhí)行;同步是等結(jié)果出現(xiàn)后,再往下執(zhí)行

代碼中出現(xiàn)異步程序時(shí),如例2中,執(zhí)行順序就會(huì)發(fā)生變化

使用回調(diào),就是讓執(zhí)行順序不會(huì)發(fā)生變化

但這肯定不是異步要表達(dá)的意思,因?yàn)橄旅娴睦邮峭耆钱惒降呢?fù)面效果,那異步到底有啥作用?

下面的例子是解決異步帶來(lái)的問(wèn)題,而非異步的優(yōu)點(diǎn)。

例子:

1、下面的程序f1()f2(),...,f5(),它會(huì)按照順序從上往下的順序執(zhí)行,就是同步。

f1 =function(){console.log(1)}
f2 =function(){console.log(2)}
f3 =function(){console.log(3)}
f4 =function(){console.log(4)}
f5 =function(){console.log(5)}

f1()
f2()
f3()
f4()
f5()

2、假如f1()是個(gè)異步函數(shù),它的執(zhí)行順序就會(huì)發(fā)生變化f2(),...,f5(),f1()

f1 =function(){
    setTimeout(function(){
        console.log(1)
    },10)
}
f2 =function(){console.log(2)}
f3 =function(){console.log(3)}
f4 =function(){console.log(4)}
f5 =function(){console.log(5)}

f1()
f2()
f3()
f4()
f5()

3、這不是我們想要的結(jié)果,我們想要的結(jié)果是f1()、f2()依次運(yùn)行,就需要使用回調(diào)函數(shù),定義是將函數(shù)A作為參數(shù),傳入函數(shù)B

f1 =function(fn){
    setTimeout(function(){
        console.log(1)
        fn.call()
    },10)
}
f2 =function(fn){console.log(2);fn.call()}
f3 =function(fn){console.log(3);fn.call()}
f4 =function(fn){console.log(4);fn.call()}
f5 =function(fn){console.log(5);fn.call()}

f1(()=>{
    f2(()=>{
        f3(()=>{
            f4(()=>{
                f5()
            })
        })
    })
})

4、或者使用Promise,更能體現(xiàn)執(zhí)行的順序

f1 =function(){
    return new Promise(function(resolve){
        setTimeout(function(){
            console.log(1)
            resolve.call()
    },10)
    })
}
f2 =function(){console.log(2)}
f3 =function(){console.log(3)}
f4 =function(){console.log(4)}
f5 =function(){console.log(5)}

f1().then(f2).then(f3).then(f4).then(f5)
回調(diào)

把函數(shù) A 作為參數(shù)傳入函數(shù) B 中

function async(f1, f2) {
    setTimeout(function() {
        f1.call();
        f2.call();
    }, 0);
}
function foo(){
    console.log("foo");
}
function bar(){
    console.log("bar");
}

console.log("異步開(kāi)始");
async(foo, bar)
console.log("異步結(jié)束");

//打印結(jié)果:
//異步開(kāi)始
//異步結(jié)束
//foo
//bar

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108006.html

相關(guān)文章

  • 同步異步、異步回調(diào)

    摘要:同步與異步以上為同步代碼,函數(shù)必須等函數(shù)執(zhí)行完畢后才能執(zhí)行。異步回調(diào)產(chǎn)生的結(jié)果就是,函數(shù)的調(diào)用并不直接返回結(jié)果,而往往是交給回調(diào)函數(shù)進(jìn)行異步處理。 同步與異步: function a(){} function b(){} a(); b(); 以上為同步代碼,函數(shù)b必須等函數(shù)a執(zhí)行完畢后才能執(zhí)行。 function a(){ ...

    dinfer 評(píng)論0 收藏0
  • javascript異步promise

    摘要:到這里,我已經(jīng)發(fā)出了一個(gè)請(qǐng)求買(mǎi)漢堡,啟動(dòng)了一次交易。但是做漢堡需要時(shí)間,我不能馬上得到這個(gè)漢堡,收銀員給我一個(gè)收據(jù)來(lái)代替漢堡。到這里,收據(jù)就是一個(gè)承諾保證我最后能得到漢堡。 同期異步系列文章推薦談一談javascript異步j(luò)avascript異步中的回調(diào)javascript異步之Promise.all()、Promise.race()、Promise.finally()javascr...

    rollback 評(píng)論0 收藏0
  • JS—異步、回調(diào)、高階函數(shù)

    摘要:而是在調(diào)用發(fā)出后,被調(diào)用者通過(guò)狀態(tài)通知來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)處理這個(gè)調(diào)用。請(qǐng)求程序發(fā)出請(qǐng)求,從服務(wù)器端獲取數(shù)據(jù),并設(shè)置了回調(diào)函數(shù)。然后,瀏覽器會(huì)設(shè)置偵聽(tīng)來(lái)自網(wǎng)絡(luò)的響應(yīng),拿到數(shù)據(jù)后,將該回調(diào)函數(shù)插入到事件循環(huán)。 并發(fā)與并行 并發(fā)是指兩個(gè)或多個(gè)事件鏈隨時(shí)間發(fā)展交替執(zhí)行,以至于從更高的層次來(lái)看,就像是同時(shí)運(yùn)行(但在任意時(shí)刻只處理一個(gè)事件) 并發(fā)的關(guān)鍵是你有處理多個(gè)任務(wù)的能力,不一定同...

    Dean 評(píng)論0 收藏0
  • 從源碼看 Promise 概念實(shí)現(xiàn)

    摘要:從源碼看概念與實(shí)現(xiàn)是異步編程中的重要概念,它較好地解決了異步任務(wù)中回調(diào)嵌套的問(wèn)題。這些概念中有趣的地方在于,標(biāo)識(shí)狀態(tài)的變量如都是形容詞,用于傳入數(shù)據(jù)的接口如與都是動(dòng)詞,而用于傳入回調(diào)函數(shù)的接口如及則在語(yǔ)義上用于修飾動(dòng)詞的副詞。 從源碼看 Promise 概念與實(shí)現(xiàn) Promise 是 JS 異步編程中的重要概念,它較好地解決了異步任務(wù)中回調(diào)嵌套的問(wèn)題。在沒(méi)有引入新的語(yǔ)言機(jī)制的前提下,這...

    kel 評(píng)論0 收藏0
  • 異步

    摘要:在異步機(jī)制中,任務(wù)隊(duì)列就是用來(lái)維護(hù)異步任務(wù)回調(diào)函數(shù)的隊(duì)列。四對(duì)象對(duì)象是工作組提出的一種規(guī)范,目的是為異步編程提供統(tǒng)一接口。 異步 1.JavaScript單線程的理解 Javascript語(yǔ)言的執(zhí)行環(huán)境是單線程(single thread)。所謂單線程,就是指一次只能完成一件任務(wù)。如果有多個(gè)任務(wù),就必須排隊(duì),前面一個(gè)任務(wù)完成,再執(zhí)行后面一個(gè)任務(wù),以此類(lèi)推。 2.JavaScript單線...

    goji 評(píng)論0 收藏0
  • Javascript的異步回調(diào)

    摘要:異步本質(zhì)上應(yīng)該就是多線程語(yǔ)言的產(chǎn)物。如果是多線程的異步,假死的應(yīng)該是運(yùn)行方法的線程,而方法仍然會(huì)按預(yù)期打印出。當(dāng)然了,按我個(gè)人的理解,應(yīng)該說(shuō)是是的回調(diào)函數(shù)。 引子 每個(gè)故事都有由來(lái)。前兩天在看 gulp 的時(shí)候,看到了它有個(gè) promise 的玩意兒,然后的然后,這兩天就掉進(jìn)了 javascript 的異步和回調(diào)的坑里面去了。 其間搜索了 javascript promise,看到了...

    CarlBenjamin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<