Typescript中函数的内部在外部之后处理,尽管代码的外部写在内部的下面
我正在使用Ionic 4中的Typescript。 我的问题是,虽然代码的外部部分写在内部部分下,但内部函数的部分在外部部分之后处理。这对我来说是个大问题,因为返回值总是错误的。如果我想要正确的值,我必须调用函数两次。 这是我的代码,您也可以在函数中看到,它只读取json文件并返回json对象Typescript中函数的内部在外部之后处理,尽管代码的外部写在内部的下面,typescript,function,return,ionic4,return-value,Typescript,Function,Return,Ionic4,Return Value,我正在使用Ionic 4中的Typescript。 我的问题是,虽然代码的外部部分写在内部部分下,但内部函数的部分在外部部分之后处理。这对我来说是个大问题,因为返回值总是错误的。如果我想要正确的值,我必须调用函数两次。 这是我的代码,您也可以在函数中看到,它只读取json文件并返回json对象 ReadFile(filename: string, fileFunktion: string) { this.http.get(filename).subscribe((data) =>
ReadFile(filename: string, fileFunktion: string) {
this.http.get(filename).subscribe((data) => {
this.data = data;
});
return this.data;
}
你能给我一些建议,如何解决这个问题?
谢谢:)订阅功能是异步的,与承诺是异步的方式类似。因此,您的函数将启动在后台运行的http请求。当它运行时,程序会继续运行,因此它会返回这个数据设置为的任何内容 如何修复它取决于您希望如何处理异步性质。一种简单的方法是将可观测数据转换为承诺,并使用async/await,这样您可以得到如下结果:
async ReadFile(filename: string, fileFunktion: string) {
this.data = await this.http.get(filename).toPromise()
return this.data
}
ReadFile是一个异步函数,因此它总是返回一个承诺,因此在调用它时需要使用wait:
await ReadFile('foo', 'barr')
混合承诺和可观察性并不是最好的事情,但它可以作为一种简单的方式来帮助你决定前进的最佳方式。你需要阅读异步函数执行。关于这个话题有很多答案。这回答了你的问题吗?非常感谢您的回复。它帮助了我和我的项目:)@lukas1231243很高兴能帮上忙。如果你对答案满意,你能把它标记为接受吗?那就是我得到了一些神奇的互联网积分。