javascript / nodejs概念

时间:2011-04-17 00:02:29

标签: javascript node.js

我发现很难获得JS回调概念。据我所知,它是一个等待被其父母调用的函数网,但这有什么好处呢? nodejs如何非阻塞?以下肯定会给“你好世界”或者它是否也可以作为第一个被称为“你好世界”? nodejs是否会切换上下文,因为它会如何跨越等待回调的函数?我知道这个问题组织得不好,因为我真的很困惑,更多信息只是评论。

SomeProccess(function() {
  print("hello");
});

OtherProccess(function() {
  print("world");
);

1 个答案:

答案 0 :(得分:3)

这完全取决于代码是阻塞还是非阻塞。

如果代码阻塞,那么SomeProcess将执行某些操作,然后调用打印“hello”的函数。如果它是非阻塞的,则意味着它要么将控制传递给子进程,要么将消息传递给流,然后在消息回来时再做一些其他的事情。

// Blocking
function SomeProcess(cb) {
    for (var i = 0; i < 10; i++) {
        ...
    }
    cb();
}

// Non blocking
function SomeProcess(cb) {
    process.nextTick(cb);
}

如果功能阻止,那么您可以获得订单。如果没有阻止那么就没有保证。

非阻止:

  • process.nextTick
  • setTimeout / setInterval
  • child_process.spawn

在node.js中,您可以假设所有IO都是非阻塞的。 node.js内部有一个阻塞工作的队列。 (调用函数),一旦完成该工作,它将返回到事件循环并获取一组新的阻塞工作,即处理来自流的传入消息或处理超时或处理process.nextTick事件。

需要注意的一点是,EventEmitter.emit正在阻塞,它将立即解析所有绑定的事件处理程序。