[英]Node.js nested callbacks
我在node.js編程中有一個非常基本的問題。 隨着我開始更深入地了解它,我發現它很有趣。
我遇到以下代碼:
Abc.do1(‘operation’,2, function(err,res1)
{
If(err) {
Callback(err);
}
def.do2(‘operation2’,function(l) {
}
}
我的問題是:
由於def.do2是寫在abc.do1的回調中的,
的確,def.do2將在abc.do1的“操作”完成並且調用回調函數之后執行。 如果是,這是一種好的編程習慣,因為我們在node.js中僅講異步和非阻塞代碼
是的,你是對的。 abc.do1()完成后執行def.do2()。 但是,這樣做是為了確保do1()在do2()開始之前已完成。 如果要並行執行,則do2()會超出do1()的回調范圍。 此代碼未完全阻止。 在do1()啟動之后,代碼仍然繼續執行do1()函數下面的所有操作(在do1的回調之外),只是直到do1()完成才執行do2()。
是的,您絕對正確,並且給出了正確的回調函數示例。
瀏覽器的主要過程是單線程事件循環。 如果您在單線程事件循環中執行了長時間運行的操作,則該過程將“阻塞”。 這很不好,因為該過程在等待操作完成時停止處理其他事件。 “警告”是少數阻止瀏覽器的方法之一:如果調用alert('test'),則無法再單擊鏈接,執行ajax查詢或與瀏覽器UI交互。
為了防止長時間運行的操作阻塞,XMLHttpRequest提供了一個異步接口。 您將操作完成后傳遞給它傳遞一個回調,以便在處理過程中將控制權移交給主事件循環而不是阻塞。
除非您想將某些東西綁定到事件處理程序,否則您沒有理由使用回調,或者您的操作可能會阻塞,因此需要異步編程接口。
觀看這部影片
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.