【发布时间】:2021-11-02 23:08:36
【问题描述】:
在 NodeJS 上,我需要为日志研究目的创建一个类似 grep 的函数,并且我正在尝试使用 readline 来实现它(因为我不想要 readline-sync)。我已经阅读了许多消息、教程、文档、stackoverflow 帖子等,但我不明白如何使其工作。
const grep = async function(pattern, filepath){
return new Promise((resolve, reject)=>{
let regex = new RegExp(pattern);
let fresult = ``;
let lineReader = require(`readline`).createInterface({
input: require(`fs`).createReadStream(filepath)
});
lineReader.on(`line`, function (line) {
if(line.match(regex)){
fresult += line;
}
});
resolve(fresult);
});
}
let getLogs = await grep(/myregex/gi, filepath);
console.log(getLogs);
这给了我:
SyntaxError: await 仅在异步函数和模块的顶层主体中有效
我哪里错了?我觉得我很好,但犯了一个初学者的错误,就在我的眼皮底下跳舞。
【问题讨论】:
-
Node 从 14.3 版本开始支持顶级等待(无需封装在
async函数中)。 pprathameshmore.medium.com/… -
@JeremyThille true,但是此时您必须将脚本/项目定义为
type:module,这对于现有项目意味着相当多的重构(当然,如果这是一个新脚本,那么很容易做到)。
标签: javascript node.js async-await promise readline