nodejs中if else执行流程问题
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的内容
嗯,明白了,谢谢!