在 Node.js 中的事件处理程序中异步等待

时间:2020-12-31 22:24:55

标签: javascript node.js

我有以下代码:

readInterface.on('line', async (line) => {
    const splitLine = line.split(',')

    const domain = splitLine[0]
    splitLine.shift()

    const query = `INSERT INTO domains (domain, ips) VALUES(?, ?);`;
    try {
      await client.execute(query, [ domain, splitLine ])
    } catch(e) {
        console.log(e)
    }
});

目前这不起作用。在转到下一行之前,代码不会等待。我该如何更改它以等待每个查询的执行,记住文件对于节点来说太大并且无法读入内存?

1 个答案:

答案 0 :(得分:4)

如果你使用the asynchronous iterator of readline,你可以串行地await每条读取行和await数据库查询Promise,这样每一个都一一进行而无需尝试做所有这些同时进行:

for await (const line of readInterface) {
    const [domain, ...splitLine] = line.split(',');
    const query = `INSERT INTO domains (domain, ips) VALUES(?, ?);`;
    try {
      await client.execute(query, [ domain, splitLine ])
    } catch(e) {
      console.log(e)
    }
}