三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 309|回复: 0
打印 上一主题 下一主题

process.nextTick(callback)

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-14 08:30:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  • callback {Function}
一旦当前事件循环结束,调用回到函数。
这不是 setTimeout(fn, 0) 的简单别名,这个效率更高。在任何附加 I/O 事件在子队列事件循环中触发前,它就会运行。
  1. console.log('start');
  2. process.nextTick(function() {
  3.   console.log('nextTick callback');
  4. });
  5. console.log('scheduled');
  6. // Output:
  7. // start
  8. // scheduled
  9. // nextTick callback
复制代码
在对象构造后,在 I/O 事件发生前,你又想改变附加事件处理函数时,这个非常有用。
  1. function MyThing(options) {
  2.   this.setupOptions(options);

  3.   process.nextTick(function() {
  4.     this.startDoingStuff();
  5.   }.bind(this));
  6. }

  7. var thing = new MyThing();
  8. thing.getReadyForStuff();

  9. // thing.startDoingStuff() gets called now, not before.
复制代码
要保证你的函数一定是 100% 同步执行,或者 100% 异步执行。例子:
  1. // WARNING!  DO NOT USE!  BAD UNSAFE HAZARD!
  2. function maybeSync(arg, cb) {
  3.   if (arg) {
  4.     cb();
  5.     return;
  6.   }

  7.   fs.stat('file', cb);
  8. }
复制代码
这个 API 非常危险. 如果你这么做:
  1. maybeSync(true, function() {
  2.   foo();
  3. });
  4. bar();
复制代码
不清楚foo() 或 bar() 哪个先执行。
更好的方法:
  1. function definitelyAsync(arg, cb) {
  2.   if (arg) {
  3.     process.nextTick(cb);
  4.     return;
  5.   }

  6.   fs.stat('file', cb);
  7. }
复制代码
注意:nextTick 队列会在完全执行完毕之后才调用 I/O 操作。因此,递归设置 nextTick 的回调就像一个 while(true); 循环一样,将会阻止任何 I/O 操作的发生。
process.umask([mask])设置或读取进程文件的掩码。子进程从父进程继承掩码。如果mask 参数有效,返回旧的掩码。否则,返回当前掩码。
  1. var oldmask, newmask = 0022;

  2. oldmask = process.umask(newmask);
  3. console.log('Changed umask from: ' + oldmask.toString(8) +
  4.             ' to ' + newmask.toString(8));
复制代码



回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-5-3 00:02 , Processed in 0.031418 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表