Javascript 承诺异步数据提取问题

Javascript 承诺异步数据提取问题,javascript,typescript,promise,es6-promise,Javascript,Typescript,Promise,Es6 Promise,console.log在内,然后打印我需要的数据。承诺没有问题。但是,由于它不阻止我的第二个控制台。log在csvRecordsArray中未定义。因此,我阅读了《承诺》一书,了解到我需要等待。只要我键入async使loadcsvasyncts,lint就会说: 类型“string[]”在ES5/ES3中不是有效的异步函数返回类型,因为它未引用与承诺兼容的构造函数值 请帮我摆脱这一困境。如果您的函数是一个异步函数,因为您需要使用等待,那么这些函数总是会返回一个承诺 因此,正确的签名是: load

console.log
内,然后
打印我需要的数据。
承诺没有问题
。但是,由于它不阻止我的第二个
控制台。log
csvRecordsArray
中未定义。因此,我阅读了《承诺》一书,了解到我需要等待。只要我键入
async
使
loadcsv
async
ts,lint就会说:

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


请帮我摆脱这一困境。

如果您的函数是一个
异步
函数,因为您需要使用
等待
,那么这些函数总是会返回一个承诺

因此,正确的签名是:

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;
}
loadcsv(文件:文件):承诺{
}

您可以通过使
异步
来更改
loadcsv
函数的实现。为此,您必须等待对this.parse的函数调用

另外,由于
async
函数需要返回
Promise
,因此必须将函数的返回类型更改为
Promise

按以下方式更改您的实现:

loadcsv(file: File): Promise<string[]>  {
}
async loadcsv(file:file):承诺{
让csvRecordsArray:string[];
csvRecordsArray=等待this.parse(文件);
console.log('mydata',csvRecordsArray);
将csvRecordsArray作为字符串[]返回;
}

感谢您的回复。欣赏它。你不能让一个函数调用一个异步函数并立即从未来返回结果。您需要为字符串数组返回一个承诺。投票重复的每个人都没有阅读该问题@Bergi你画得太快了。@你的意思是说这个问题只是关于类型错误(来自没有显示的代码)?我认为OPs的问题在于他对异步代码的误解,在试图在回调中分配
csvRecordsArray=p
时暴露出来。(是的,只有我投了复制票,这来自我闪亮的mjölnir:P)@Bergi你应该谨慎行事。显然,你在社区中帮了大忙,但快速结束问题而不作解释是给新来者带来如此坏名声的原因。@Evert我甚至发表了评论。你认为遗漏了什么解释?顺便说一句,如果你愿意,我可以重新开始这个问题
async loadcsv(file: File): Promise<string[]> {
  let csvRecordsArray: string[];
  csvRecordsArray = await this.parse(file);
  console.log('mydata', csvRecordsArray);
  return csvRecordsArray as string[];
}