繁体   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