簡體   English   中英

Node.js嵌套回調

[英]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提供了一個異步接口。 您將操作完成后傳遞給它傳遞一個回調,以便在處理過程中將控制權移交給主事件循環而不是阻塞。

除非您想將某些東西綁定到事件處理程序,否則您沒有理由使用回調,或者您的操作可能會阻塞,因此需要異步編程接口。

觀看這部影片

http://www.yuiblog.com/blog/2010/08/30/yui-theater-douglas-crockford-crockford-on-javascript-scene-6-loopage-52-min/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM