gpt4 book ai didi

javascript - 如何通过 Promise/async-await 返回 Papa 解析的 CSV

转载 作者:行者123 更新时间:2023-11-28 14:18:17 27 4
gpt4 key购买 nike

有人可以帮助我理解为什么这会返回待处理的 promise ,而不是数据吗?

async function toJson (filepath) {
const file = fs.createReadStream(filepath)
let json = new Promise((resolve, reject) => {
Papa.parse(file, {
header: true,
complete (results, file) {
resolve(results)
},
error (err, file) {
reject(err)
}
})
})
let result = await json
return result.data
}

如果我将 return result.data 行更改为 console.log(result.data),它会按预期将数据数组记录到控制台。为什么它不简单地返回该数组?!?!

最佳答案

正如 Roamer-1888 在评论中添加的那样,async functions总是返回 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() 时,如果您位于异步函数或链 .then() 内部,则可以使用 await > 在返回的 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 (感谢在 error 函数中调用 reject)。请记住,通过使用 results.data 调用 resolve,您可以将 results.errorsresults.meta 放在一边。包含有关读取的 csv 的有用信息。

关于javascript - 如何通过 Promise/async-await 返回 Papa 解析的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56427009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com