CNode

nodejs中if else执行流程问题

Ddidiaoyu发布于13 年前最后回复13 年前10 回复13267 浏览0 收藏
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)

H
hexie#1·13 年前

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

D
didiaoyu#2·13 年前
引用 hexie你是不是相同的代码执行了两次。

没有呀,你看下面:

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

不解。。。

H
hexie#3·13 年前
引用 hexie你是不是相同的代码执行了两次。

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

Z
zensh#4·13 年前

因为

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');
}
Z
zaobao#5·13 年前

这个不是从断点开始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都会输出的。

D
didiaoyu#8·13 年前
引用 hexie你是不是相同的代码执行了两次。

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

X
xujun52011#9·13 年前

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

参与回复
登录后即可参与回复。登录