1 回答

TA贡献1875条经验 获得超3个赞
正如 Roamer-1888 在评论中添加的那样,异步函数总是返回一个Promise,即使你await在它里面然后返回数据,它也会作为一个 Promise 返回。
在函数的调用者中,您必须等待 Promise 或使用.then()它才能访问传递的数据。
该toJson函数可以更好地编写为仅返回这样的 Promise
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()返回的 Promise链来访问数据。
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 的有用信息。
添加回答
举报