我以为我知道这是什么
Thought I knew what this was
在下面的代码片段中,我使用服务 (Angular) 通过 fileReader 提取文本,对异步部分使用承诺。我遇到的问题是(我相信)范围问题并且对此感到困惑。在我的组件中,我声明了一个实例变量:
myDoc:docWrapperClass。
基本上当文件reader提取文本的时候,我想把结果赋值给这个局部变量。在我尝试完成作业之前,一切都很好。 IE。:
this.myDoc = docContents 当 promise 解决时(当前注释掉)。
当语句留在编译器中时抱怨:
类型“{}”不可分配给类型 docWrapperClass:fileName。
docWrapperClass 上有一个名为 fileName 的 属性,但不确定 {} 的含义。我已经注释掉了赋值,然后在 then() 块中的 console.log 语句上打了一个断点。当我打字时
"this" 在控制台中,我得到 undefined,这真的让我很困惑。我至少希望 "this" 有一个函数。我的问题是如何将承诺返回的 docWrapperClass 分配给实例变量?
export class myDocComponent implements OnInit {
constructor(private fileReaderService: ReadLocalFileService,
private textExtractor: TextExtractorServiceService) { }
ngOnInit() { }
docWords: string[] = [];
myDoc: docWrapperClass = null;
selectFile(event: any) {
console.log("Debug");
this.fileReaderService.readFile(event.target.files)
.then((docContents) => {
console.log("DocContents: " + docContents);
//this.myDoc = docContents;
});
}
}
this.fileReaderService.readFile
没有 return 签名,所以当你调用 then
它的 returned 值时,Typescript 编译器不知道它在做什么和。因此,您的 docContents
是类型 {}
,不能分配给您的类型 docWrapperClass
。
TypeScript 的一大优势首先是类型安全。您应该将 readFile
的 return 类型定义为 Promise<docWrapperClass>
,并且同样定义所有函数的 return 类型。
一旦编译器知道方法 return 是 Promise<docWrapperClass
,它就可以正确地推断出 docContents
可以分配给 myDoc
。
在下面的代码片段中,我使用服务 (Angular) 通过 fileReader 提取文本,对异步部分使用承诺。我遇到的问题是(我相信)范围问题并且对此感到困惑。在我的组件中,我声明了一个实例变量: myDoc:docWrapperClass。
基本上当文件reader提取文本的时候,我想把结果赋值给这个局部变量。在我尝试完成作业之前,一切都很好。 IE。: this.myDoc = docContents 当 promise 解决时(当前注释掉)。
当语句留在编译器中时抱怨: 类型“{}”不可分配给类型 docWrapperClass:fileName。
docWrapperClass 上有一个名为 fileName 的 属性,但不确定 {} 的含义。我已经注释掉了赋值,然后在 then() 块中的 console.log 语句上打了一个断点。当我打字时 "this" 在控制台中,我得到 undefined,这真的让我很困惑。我至少希望 "this" 有一个函数。我的问题是如何将承诺返回的 docWrapperClass 分配给实例变量?
export class myDocComponent implements OnInit {
constructor(private fileReaderService: ReadLocalFileService,
private textExtractor: TextExtractorServiceService) { }
ngOnInit() { }
docWords: string[] = [];
myDoc: docWrapperClass = null;
selectFile(event: any) {
console.log("Debug");
this.fileReaderService.readFile(event.target.files)
.then((docContents) => {
console.log("DocContents: " + docContents);
//this.myDoc = docContents;
});
}
}
this.fileReaderService.readFile
没有 return 签名,所以当你调用 then
它的 returned 值时,Typescript 编译器不知道它在做什么和。因此,您的 docContents
是类型 {}
,不能分配给您的类型 docWrapperClass
。
TypeScript 的一大优势首先是类型安全。您应该将 readFile
的 return 类型定义为 Promise<docWrapperClass>
,并且同样定义所有函数的 return 类型。
一旦编译器知道方法 return 是 Promise<docWrapperClass
,它就可以正确地推断出 docContents
可以分配给 myDoc
。