【问题标题】:promise async data extract issue [duplicate]承诺异步数据提取问题[重复]
【发布时间】:2018-09-28 23:48:28
【问题描述】:
loadcsv(file: File): string[] {
  let csvRecordsArray: string[];
  this.parse(file).then((p) => {
    console.log(p);
    csvRecordsArray = p as string[];
  });
  console.log('mydata', csvRecordsArray);
  return csvRecordsArray;
}

console.log 内的then 打印我需要的数据。 Promise 没什么问题。但是,由于它不会阻止我的第二个console.logcsvRecordsArray 中未定义。所以我阅读了Promises 并了解到我需要await。只要我输入async 使loadcsv async ts lint 说:

类型 'string[]' 在 ES5/ES3 中不是有效的异步函数返回类型,因为它不引用与 Promise 兼容的构造函数值。

请帮助我摆脱这种混乱。

【问题讨论】:

  • 你不能创建一个调用异步函数并立即返回未来结果的函数。您需要为字符串数组返回一个承诺。
  • 每个重复投票的人都没有阅读这个问题。 @Bergi 你抽签太快了。
  • @Evert 你的意思是这个问题只是关于类型错误(来自甚至没有显示的代码)?我认为 OP 的问题是他对异步代码的误解,在试图在回调中分配 csvRecordsArray = p 时浮出水面。 (是的,只有我投票重复,这来自我闪亮的抛光 mjölnir:P)
  • @Bergi 您应该谨慎行事。您显然在社区中非常乐于助人,但在没有解释的情况下迅速结束问题是 SO 给新人带来坏名声的原因。
  • @Evert 我什至评论过。你认为缺少什么解释?顺便说一句,如果你愿意,我可以重新提出问题

标签: javascript typescript promise es6-promise


【解决方案1】:

您可以更改 loadcsv 函数的实现,将其设为 async。为此,您必须 awaitthis.parse 的函数调用。

此外,由于 async 函数预计会返回 Promise,因此您必须将函数的返回类型更改为 Promise<string[]>

像这样改变你的实现:

async loadcsv(file: File): Promise<string[]> {
  let csvRecordsArray: string[];
  csvRecordsArray = await this.parse(file);
  console.log('mydata', csvRecordsArray);
  return csvRecordsArray as string[];
}

【讨论】:

  • 感谢您的回复。欣赏它。
【解决方案2】:

如果您的函数是 async 函数,因为您需要使用 await,这些函数总是返回一个 Promise。

所以正确的签名是:

loadcsv(file: File): Promise<string[]>  {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2021-10-07
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多