node 中有console.log/debug/warn/error个 node .js asynchrounous?我的意思是,javascript代码的执行会在屏幕上打印出来之前停止,还是会在稍后的阶段打印出来?

另外,我想知道是否有可能安装控制台.如果语句在 node 崩溃后立即显示,则登录以不显示任何内容.

推荐答案

Update:从 node 0.6开始这篇文章已经过时了,因为stdout现在是synchronous.

让我们看看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,这个东西继承自socket.基本上,所有的数据都由插座来处理.

Let's test it!

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);

Result

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

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

终端需要大约1秒钟打印出套接字内容,而 node 只需要17毫秒就可以将数据推送到终端.

流的情况也是如此,文件的情况得到句柄asynchronous.

所以yes个 node .js信守其非封锁promise .

Node.js相关问答推荐

Azure虚拟机上的JS Express:可疑请求?

使用NodeJS在S3上传文件时的格式问题

NodeJS缓冲区大小逻辑:为什么默认是8KB,而不仅仅是数据大小?

构建期间 Docker 容器中的 npm 安装失败

遇到 - TypeError:try 使用 Express(Node.js) 从 JSON 文件访问数据时无法读取未定义的属性(读取帖子)

我需要聚合两个 MongoDB 集合

try 在 NodeJS 项目中实现 SimplePay (OTP) 支付网关,但我无法获得与技术文档中相同的签名

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

Mongoose-更新嵌套数组

无法通过谷歌Electron 表格 api( node js)中的服务帐户访问写入

如何刷新 youtube-data-api v3 的访问令牌

类 WebSwapCGLLayer 在 Mac OS X /System 和 node_modules 中都实现了

当我使用 uuid 代码意外崩溃,然后工作正常?

使用加密模块的流功能获取文件的哈希(即:没有 hash.update 和 hash.digest)

node/express:使用 Forever 连续运行脚本时设置 NODE_ENV

React Native ios build:找不到 node

PhoneGap/Cordova Android 开发

如何判断MongoDB本机nodejs驱动程序中是否存在集合?

响应分块时获取整个响应正文?

AWS Lambda 函数写入 S3