我正在使用Node.js中的winston开发日志框架,我已经检查过winston是否使用了Async模块,但我需要验证它是否真正具有异步特性。
请建议。
请建议。
EventEmitter
不是异步的。callback
),但并非总是异步的。Console
传输调用callback
而没有nextTick - 它具有异步风格的签名,但仍然在同一个tick内,例如:
Console.prototype.log = function (level, msg, meta, callback) {
if (this.silent) {
return callback(null, true);
}
//...
if (level === 'error' || level === 'debug') {
process.stderr.write(output + '\n');
} else {
process.stdout.write(output + '\n');
}
//
// Emit the `logged` event immediately because the event loop
// will not exit until `process.stdout` has drained anyway.
//
self.emit('logged');
callback(null, true);
};
Logger
与 Console
类似,如前所述,它会立即回调而不需要 nextTick
(或其他真正的异步操作)。它确实使用了async
模块,但在某些情况下也不是完全异步的,即:
function cb(err) {
if (callback) {
if (err) return callback(err);
callback(null, level, msg, meta);
}
callback = null;
if (!err) {
self.emit('logged', level, msg, meta);
}
}
async.forEach(this._names, emit, cb);
我会承认,File
传输器是异步的,但这只是因为 fs
是异步的。
不要忘记,无论如何,“控制台函数在目标是终端或文件时都是同步的”。