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[];
}