我有以下代码:
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)
}
});
目前这不起作用。在转到下一行之前,代码不会等待。我该如何更改它以等待每个查询的执行,记住文件对于节点来说太大并且无法读入内存?
答案 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)
}
}