首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过promise/async-await返回Papa解析的CSV

如何通过promise/async-await返回Papa解析的CSV
EN

Stack Overflow用户
提问于 2019-06-03 20:03:59
回答 1查看 2.4K关注 0票数 0

有人能帮我理解为什么这会返回一个未决的承诺,而不是数据吗?

代码语言:javascript
复制
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),它会按照预期将数据数组记录到控制台。为什么它不简单地返回该数组?!?!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 20:19:04

正如Roamer-1888在注释中添加的那样,async functions总是返回一个Promise,即使您在它内部执行await,然后返回它将作为Promise返回的数据。

在函数的调用方中,您必须等待Promise或在其上使用.then()才能访问交付的数据。

可以更好地编写toJson函数,只返回如下所示的承诺

代码语言:javascript
复制
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,也可以在返回的Promise上使用chain .then()来访问数据。

代码语言:javascript
复制
async function main() {
  try {
    const data = await toJson(filepath)
    // do something with the data...
  } catch (err) {
    console.error('Could not parse json', err)
  }
}

或使用.then()

代码语言:javascript
复制
toJson('path')
.then(console.log)
.catch(console.log)

您将能够捕获底层FileReader中的错误(这要归功于在error函数中调用reject )。请记住,通过使用results.data调用resolve,可以将包含有关已读取csv的有用信息的results.errorsresults.meta放在一边。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56427009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档