一旦当前事件循环结束,调用回到函数。 这不是 setTimeout(fn, 0) 的简单别名,这个效率更高。在任何附加 I/O 事件在子队列事件循环中触发前,它就会运行。 - console.log('start');
- process.nextTick(function() {
- console.log('nextTick callback');
- });
- console.log('scheduled');
- // Output:
- // start
- // scheduled
- // nextTick callback
复制代码在对象构造后,在 I/O 事件发生前,你又想改变附加事件处理函数时,这个非常有用。 - function MyThing(options) {
- this.setupOptions(options);
- process.nextTick(function() {
- this.startDoingStuff();
- }.bind(this));
- }
- var thing = new MyThing();
- thing.getReadyForStuff();
- // thing.startDoingStuff() gets called now, not before.
复制代码要保证你的函数一定是 100% 同步执行,或者 100% 异步执行。例子: - // WARNING! DO NOT USE! BAD UNSAFE HAZARD!
- function maybeSync(arg, cb) {
- if (arg) {
- cb();
- return;
- }
- fs.stat('file', cb);
- }
复制代码这个 API 非常危险. 如果你这么做: - maybeSync(true, function() {
- foo();
- });
- bar();
复制代码不清楚foo() 或 bar() 哪个先执行。 更好的方法: - function definitelyAsync(arg, cb) {
- if (arg) {
- process.nextTick(cb);
- return;
- }
- fs.stat('file', cb);
- }
复制代码注意:nextTick 队列会在完全执行完毕之后才调用 I/O 操作。因此,递归设置 nextTick 的回调就像一个 while(true); 循环一样,将会阻止任何 I/O 操作的发生。 process.umask([mask])设置或读取进程文件的掩码。子进程从父进程继承掩码。如果mask 参数有效,返回旧的掩码。否则,返回当前掩码。
- var oldmask, newmask = 0022;
- oldmask = process.umask(newmask);
- console.log('Changed umask from: ' + oldmask.toString(8) +
- ' to ' + newmask.toString(8));
复制代码
|