Просто сделать функцию async
ничего не делает для вас sh здесь. Вы должны выяснить, какие асинхронные операции вы можете await
, чтобы сериализовать ваши асинхронные операции.
В последних версиях node.js вы можете использовать структуру for await ()
с асинхронным итератором в Интерфейс readline для обработки всех строк.
async import(req, res) {
var rd = readline.createInterface({
input: fs.createReadStream('.../file.csv'),
console: false
});
const createQuery = `INSERT INTO
table('columns')
VALUES ?`;
const values = [];
for await (const line of rd) {
values.push({...})
}
const cs = new pgp.helpers.ColumnSet(['columns'], {table: 'table'});
const query = pgp.helpers.insert(values, cs);
}
К вашему сведению, вы можете увидеть пример этого в readline do c.
You также совсем не нужно использовать async
, поскольку вы можете решить эту проблему, просто поместив последние две строки в прослушиватель событий для события close
:
import(req, res) {
var rd = readline.createInterface({
input: fs.createReadStream('.../file.csv'),
console: false
});
const createQuery = `INSERT INTO
table('columns')
VALUES ?`;
const values = [];
rd.on('line', function(line) {
//stuff
values.push({
//stuff
});
}
}).on('close', () => {
// done with all line processing here
const cs = new pgp.helpers.ColumnSet(['columns'], {table: 'table'});
const query = pgp.helpers.insert(values, cs);
});
}