Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了是node.js’console.log异步?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
node.js中的console.log / debug / warn / error是否异步?我的意思是JavaScript代码执行停止,直到东西被打印在屏幕上,或者将打印在稍后阶段?

此外,我有兴趣知道是否可能的console.log不显示任何东西,如果语句立即崩溃的节点后。

解决方法

更新:从Node 0.6开始,这个帖子已过时,因为Stdout现在是同步的。

好吧,让我们看看console.log实际上是什么。

首先它是console module的一部分:

exports.log = function() {
  process.stdout.write(format.apply(this,arguments) + '\n');
};

所以它只是做一些格式化和写入process.stdout,没有异步到目前为止。

process.stdout是一个getter defined on startup,它被延迟初始化,我添加了一些注释来解释一些事情:

.... code here...
process.__defineGetter__('stdout',function() {
  if (stdout) return stdout;                            // only initialize it once 

  /// many requires here ...

  if (binding.isatty(fd)) {                             // a terminal? great!
    stdout = new tty.WriteStream(fd);
  } else if (binding.isStdoutBlocking()) {              // a file?
    stdout = new fs.WriteStream(null,{fd: fD});
  } else {
    stdout = new net.Stream(fd);                        // a stream? 
                                                        // For example: node foo.js > out.txt
    stdout.readable = false;
  }

  return stdout;
});

在TTY和UNIX的情况下,我们结束了here,这个东西继承了套接字。因此,所有的节点基本上是将数据推送到套接字,然后终端照顾其余的

让我们测试一下吧!

var data = '111111111111111111111111111111111111111111111111111';
for(var i = 0,l = 12; i < l; i++) {
    data += data; // warning! gets very large,very quick
}

var start = Date.Now();
console.log(data);
console.log('wrote %d bytes in %dms',data.length,Date.Now() - start);

结果

....a lot of ones....1111111111111111
wrote 208896 bytes in 17ms

real    0m0.969s
user    0m0.068s
sys  0m0.012s

终端需要大约1秒来打印出套接内容,但是节点只需要17毫秒来将数据推送到终端。

流情况也是如此,并且文件大小也得到句柄asynchronous

所以是的Node.js适用于其非阻塞promise。

大佬总结

以上是大佬教程为你收集整理的是node.js’console.log异步?全部内容,希望文章能够帮你解决是node.js’console.log异步?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。