[英]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.