CNode

process.nextTick()的使用方法

Aaarontang发布于14 年前最后回复9 年前7 回复13888 浏览0 收藏
function doSomething(args, callback) {

somethingComplicated(args); callback(); } doSomething(function onEnd() { compute(); }); 代码0

function doSomething(args, callback) {

somethingComplicated(args); process.nextTick(callback); } doSomething(function onEnd() { compute(); }); 代码1, 请问有没有使用process.nextTick()的区别是什么。 执行的顺序不都是 compute() somethingComplicated() callback 吗请高手支教

查看回复

回复 (7)

J
jiukunz#1·12 年前

不知道是不是node更新的原因,上面的结果现在都不工作,递归的nextTick会占据所有的cpu,而不会返回event loop, 原因在

http://stackoverflow.com/questions/17502948/nexttick-vs-setimmediate-visual-explanation

上述的情况如果想在http server不block 请求的情况下能处理长时间运算的话,应该使用setImmediate,代码如下:

var wait = function (mils) { var now = new Date; while (new Date - now <= mils); };

function compute() { console.log('Start'); wait(1000); console.log('Works 1s'); setImmediate(compute); }

http.createServer(function (req, res) { console.log('new request'); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }).listen(3000, '127.0.0.1');

compute();

S
syndim#2·14 年前
引用 syndim上面是同步代码,下面是异步代码。运行一下下面这个例子应该就清楚了。 function doSomething(callback) { setTimeout(function () { cons...

可能上面那个例子不太好,看下面这个:

function somethingComplicated() {
	setTimeout(function () {
		console.log('doing');
	}, 1000);
}

function doSomething(callback) {
	somethingComplicated();
	process.nextTick(callback);
}

console.log('before doing');

doSomething(function () {
	console.log('done');
});

执行doSomething的时候不会等somethingComplicated执行完成才返回,而是会立刻调用callback

S
syndim#3·14 年前

上面是同步代码,下面是异步代码。运行一下下面这个例子应该就清楚了。

function doSomething(callback) {
	setTimeout(function () {
		console.log('doing');
	}, 1000);
	process.nextTick(callback);
}

console.log('before doing');

doSomething(function () {
	console.log('done');
});
H
haiyupeter#6·14 年前

process.nextTick()

指的是将当前的处理放置到队尾去,为防止某些进程执行的时间太长 队列是指:当前NodeJS线程处理队列

H
haiyupeter#7·14 年前

http://freewind.me/blog/20120516/926.html

这里面有描述process.nextTick()的用法

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