Как добавил Roamer-1888 в комментариях, асинхронные функции всегда возвращают Promise , даже если вы await
внутри него и затем возвращаете данные, которые он вернет в качестве Promise.
В вызывающей функции функции вам придется ждать Promise или использовать .then()
для доступа к доставленным данным.
Функция toJson
может быть лучше записана впросто верните обещание, подобное этому
function toJson (filepath) {
const file = fs.createReadStream(filepath)
return new Promise((resolve, reject) => {
Papa.parse(file, {
header: true,
complete (results, file) {
resolve(results.data)
},
error (err, file) {
reject(err)
}
})
})
}
Теперь, когда вы вызываете toJson()
, вы можете использовать либо await
, если вы находитесь внутри асинхронной функции или цепочки .then()
в возвращенном обещании, чтобы получить доступ кdata.
async function main() {
try {
const data = await toJson(filepath)
// do something with the data...
} catch (err) {
console.error('Could not parse json', err)
}
}
Или с .then()
toJson('path')
.then(console.log)
.catch(console.log)
Вы сможете отлавливать ошибки из нижележащего FileReader (благодаря вызову reject
изнутрифункция error
).Имейте в виду, что, вызывая resolve
с results.data
, вы откладываете results.errors
и results.meta
, которые содержат полезную информацию о прочитанном csv.