技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

[示例]JavaScript同步回調(diào)轉(zhuǎn)為異步回調(diào)

作者:admin    時(shí)間:2022-6-27 16:43:51    瀏覽:

JavaScript 同步回調(diào)和異步回調(diào)之間的主要區(qū)別在于同步回調(diào)立即執(zhí)行,而異步回調(diào)的執(zhí)行推遲到稍后的時(shí)間點(diǎn)。在本文中,將通過示例來分析學(xué)習(xí)同步回調(diào)和異步回調(diào)。

同步回調(diào)

回調(diào)函數(shù)在主函數(shù)中作為參數(shù)傳遞,這些回調(diào)稍后在主函數(shù)中調(diào)用:

function CallBackTeaser(callback, param){
  console.log(`Calling the callback function`);
  callback(param);
  console.log(`callback function completed execution`);    
}
function consoleMyDetails(person){
  if(person){
    console.log(`Hi, my name is ${person.name}, i am ${person.job} & super exited about ${person.hobby}`);
  }
}
CallBackTeaser(consoleMyDetails, {'name': 'Praveen',
  'job':'Developer',
  'hobby':'learning new technologies.'
});

輸出

Calling the callback function
Hi, my name is Praveen, i am Developer & super exited about learning new technologies.
callback function completed execution

在上面的代碼中,consoleMyDetails 是一個(gè)回調(diào)方法——因?yàn)樗鳛閰?shù)傳遞給 CallBackTeaser 方法,并且是從 Teaser 方法內(nèi)部調(diào)用的。

這個(gè)例子是同步執(zhí)行回調(diào)函數(shù)的。

異步回調(diào)

回調(diào)也可以異步執(zhí)行,這意味著回調(diào)被放入任務(wù)隊(duì)列以首先完成當(dāng)前正在執(zhí)行的任務(wù),然后一旦執(zhí)行堆棧為空,事件循環(huán)將選擇等待執(zhí)行的任務(wù)。

代碼示例:

function CallBackTeaser(callback, param){
  console.log(`Calling the callback function`);
  setTimeout(()=>{callback(param)}, 0); //異步調(diào)用函數(shù), 第一個(gè)參數(shù)傳遞回調(diào)函數(shù)
  console.log(`callback function completed execution`);
}
function consoleMyDetails(person){
  if(person){
    console.log(`Hi, my name is ${person.name}, i am ${person.job} & super exited about ${person.hobby}`);
  }
}
CallBackTeaser(consoleMyDetails, {'name': 'Praveen',
  'job':'Developer',
  'hobby':'learning new technologies.'
});  

輸出

Calling the callback function
callback function completed execution
Hi, my name is Praveen, i am Developer & super exited about learning new technologies.

在異步版本中,CallBackTeaser 使用 setTimeout 函數(shù)注冊一個(gè)回調(diào)以異步調(diào)用。

注意,consoleMyDetails 的輸出是最后打印出來,這是因?yàn)檫@個(gè)回調(diào)的異步執(zhí)行,延遲了它的執(zhí)行到當(dāng)前正在執(zhí)行的任務(wù)完成。

結(jié)論

上述兩個(gè)示例,可以看到輸出的差異——要記住的是:

  • 這兩個(gè)示例都使用回調(diào)。
  • 第一個(gè)同步調(diào)用回調(diào),而第二個(gè)異步使用它。

我希望,這將幫助你更好地理解回調(diào)以及同步和異步使用它們的上下文。

相關(guān)文章

標(biāo)簽: 回調(diào)函數(shù)  callback  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */