stream.on
не возвращает обещание, поэтому вы не можете await
выполнить его.
Вы можете обойти это, возвратив обещание из функции readCSV
:
function readCSV() {
return new Promise(resolve => {
const filepath = path.resolve('src/input_csv.csv');
const readstream = fs.createReadStream(filepath);
const stream = readstream.pipe(parser());
let productIds = [];
stream.on('data', data => {
productIds.push(data.SourceProductId);
console.log('SourceProductId', data.SourceProductId);
});
stream.on('end', () => {
console.log(productIds);
if (productIds.length > 0) resolve(productIds);
else resolve('no products found');
});
});
}
Вы создаете обещание, передавая функцию обратного вызова в качестве аргумента.Эта функция обратного вызова получает аргумент resolve
, который является другой функцией обратного вызова, которую вы вызываете, когда ваша асинхронная операция выполнена, передавая результат.
В приведенном выше примере мы вызываем этот обратный вызов resolve
сидентификаторы продукта после завершения потока чтения файла.
Поскольку readCSV
теперь возвращает обещание, вы можете await
выполнить его, как в примере с кодом:
const productIds = await readCSV();