摘要:例子下面的程序,,,,它會按照順序從上往下的順序執(zhí)行,就是同步。
異步
我對異步的理解:
異步是不等結(jié)果,往下執(zhí)行;同步是等結(jié)果出現(xiàn)后,再往下執(zhí)行
代碼中出現(xiàn)異步程序時,如例2中,執(zhí)行順序就會發(fā)生變化
使用回調(diào),就是讓執(zhí)行順序不會發(fā)生變化
但這肯定不是異步要表達的意思,因為下面的例子是完全是異步的負面效果,那異步到底有啥作用?
下面的例子是解決異步帶來的問題,而非異步的優(yōu)點。
例子:
1、下面的程序f1(),f2(),...,f5(),它會按照順序從上往下的順序執(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()是個異步函數(shù),它的執(zhí)行順序就會發(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()依次運行,就需要使用回調(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("異步開始"); async(foo, bar) console.log("異步結(jié)束"); //打印結(jié)果: //異步開始 //異步結(jié)束 //foo //bar
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108006.html
摘要:同步與異步以上為同步代碼,函數(shù)必須等函數(shù)執(zhí)行完畢后才能執(zhí)行。異步回調(diào)產(chǎn)生的結(jié)果就是,函數(shù)的調(diào)用并不直接返回結(jié)果,而往往是交給回調(diào)函數(shù)進行異步處理。 同步與異步: function a(){} function b(){} a(); b(); 以上為同步代碼,函數(shù)b必須等函數(shù)a執(zhí)行完畢后才能執(zhí)行。 function a(){ ...
摘要:到這里,我已經(jīng)發(fā)出了一個請求買漢堡,啟動了一次交易。但是做漢堡需要時間,我不能馬上得到這個漢堡,收銀員給我一個收據(jù)來代替漢堡。到這里,收據(jù)就是一個承諾保證我最后能得到漢堡。 同期異步系列文章推薦談一談javascript異步j(luò)avascript異步中的回調(diào)javascript異步之Promise.all()、Promise.race()、Promise.finally()javascr...
摘要:而是在調(diào)用發(fā)出后,被調(diào)用者通過狀態(tài)通知來通知調(diào)用者,或通過回調(diào)函數(shù)處理這個調(diào)用。請求程序發(fā)出請求,從服務(wù)器端獲取數(shù)據(jù),并設(shè)置了回調(diào)函數(shù)。然后,瀏覽器會設(shè)置偵聽來自網(wǎng)絡(luò)的響應(yīng),拿到數(shù)據(jù)后,將該回調(diào)函數(shù)插入到事件循環(huán)。 并發(fā)與并行 并發(fā)是指兩個或多個事件鏈隨時間發(fā)展交替執(zhí)行,以至于從更高的層次來看,就像是同時運行(但在任意時刻只處理一個事件) 并發(fā)的關(guān)鍵是你有處理多個任務(wù)的能力,不一定同...
摘要:從源碼看概念與實現(xiàn)是異步編程中的重要概念,它較好地解決了異步任務(wù)中回調(diào)嵌套的問題。這些概念中有趣的地方在于,標識狀態(tài)的變量如都是形容詞,用于傳入數(shù)據(jù)的接口如與都是動詞,而用于傳入回調(diào)函數(shù)的接口如及則在語義上用于修飾動詞的副詞。 從源碼看 Promise 概念與實現(xiàn) Promise 是 JS 異步編程中的重要概念,它較好地解決了異步任務(wù)中回調(diào)嵌套的問題。在沒有引入新的語言機制的前提下,這...
摘要:異步本質(zhì)上應(yīng)該就是多線程語言的產(chǎn)物。如果是多線程的異步,假死的應(yīng)該是運行方法的線程,而方法仍然會按預(yù)期打印出。當然了,按我個人的理解,應(yīng)該說是是的回調(diào)函數(shù)。 引子 每個故事都有由來。前兩天在看 gulp 的時候,看到了它有個 promise 的玩意兒,然后的然后,這兩天就掉進了 javascript 的異步和回調(diào)的坑里面去了。 其間搜索了 javascript promise,看到了...
閱讀 1032·2021-11-23 09:51
閱讀 2356·2021-10-08 10:22
閱讀 2624·2021-09-29 09:35
閱讀 866·2021-09-22 15:20
閱讀 2869·2019-08-30 15:53
閱讀 2419·2019-08-30 13:55
閱讀 1108·2019-08-29 17:27
閱讀 2876·2019-08-29 17:26