nodejs中if else执行流程问题
发布于 12 年前 作者 didiaoyu 12698 次浏览 最后一次编辑是 8 年前
var cluster = require("cluster");

if(cluster.isMaster){
var worker = cluster.fork()
worker.on("message", function(msg){
    console.log(msg);
});
}else{
    console.log('aaaa');
}

为什么上面的代码第一次运行后会输出aaaa, 不是应该进入if 里面吗? 为什么进了if 又进else 帮忙解释一下node执行流程吧,谢谢!

10 回复

你是不是相同的代码执行了两次。

没有呀,你看下面:

if(cluster.isMaster){
console.log("master");
var worker = cluster.fork()
worker.on("message", function(msg){
	console.log(msg);
});
}else{
console.log('aaaa');
}

像这段代码我在windows下命令行输入 node test.js(上述代码的文件名) 运行后输出的是:

F:\nodejs>node test.js
master
aaaa

不解。。。

@didiaoyu 你可以尝试在代码里面添加一个闭包,每次访问这段代码都+1 并打印,你看看代码响应了多少次

因为

var worker = cluster.fork()

开启了新进程,你运行这个就知道了

var cluster = require("cluster");
console.log(cluster.isMaster);
if (cluster.isMaster) {
    console.log("master");
    var worker = cluster.fork()
    worker.on("message", function (msg) {
        console.log(msg);
    });
} else {
    console.log('aaaa');
}

这个不是从断点开始fork,是从头开始的,你试试:

var cluster = require('cluster');

console.log("aaa");

if (cluster.isMaster) {
  for (var i = 0; i < 10; i++)
    cluster.fork();
} else {
  console.log("bbb");
}

aaa和bbb都会输出的。

嗯,是的!谢谢!

嗯,应该是因为开启了新进程的原因!谢谢!

@hexie 谢谢,应该是cluster.fork()开启了新进程的原因!

本来就应该是这样的 你调用了fork方法相当于再次启动了一个进程 而这个进程不是mater的 所以就执行了else的内容

嗯,明白了,谢谢!

回到顶部