我有一个简单的函数,它将在每行的开头添加所需的字符串。我可以使用流来进行此操作,但在某些情况下,使用 console.log() 类型的构造也很方便。
这是函数:
//接受一个要前置的字符串和一个要前置的流:
exports.lp = function (str, strm) {
return function prependLog() {
var args = Array.from(arguments);
var hasNonWhitespace = args.some(function (a) {
var str = String(a);
return str.length > 0 && /\S/g.test(str);
});
if (hasNonWhitespace) {
strm.write(str);
}
args.forEach(function (s, i) {
String(s).split('\n').forEach(function (s, i) {
if (i < 1) {
strm.write(s + ' ');
}
else {
strm.write('\n' + str + s);
}
});
});
strm.write('\n');
};
};
使用方法如下:
const {lp} = require('log-prepend');
const fn = lp(' [foobar] ', process.stdout);
fn('\n');
fn();
fn();
fn('','','');
fn('log1', 'log2\n3',4,5 + '\n55');
fn('a','b','c');
这是上面的输出:
[foobar]
[foobar] log1 log2
[foobar] 34 5
[foobar] 55
[foobar] a b c
问题是,对于没有非空白字符的空行,它通常可以工作,但是当我包含换行符时,它会输出 [foobar],即使该行上没有任何内容。
我不明白为什么我的函数对于没有非空白的行不省略 [foobar]
。确切地说,是上面的第一个 [foobar]
实例让我感到困惑。
最佳答案
遵循这里的逻辑有点困难,但这是否是因为您希望使用第一个 forEach 函数中的索引变量,而实际上它是从第二个 forEach 函数中使用的?重命名初始变量可能会有所帮助。
关于javascript - 无法正确编码前置记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46145647/