Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript中函数的内部在外部之后处理,尽管代码的外部写在内部的下面_Typescript_Function_Return_Ionic4_Return Value - Fatal编程技术网

Typescript中函数的内部在外部之后处理,尽管代码的外部写在内部的下面

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) =>

我正在使用Ionic 4中的Typescript。 我的问题是,虽然代码的外部部分写在内部部分下,但内部函数的部分在外部部分之后处理。这对我来说是个大问题,因为返回值总是错误的。如果我想要正确的值,我必须调用函数两次。 这是我的代码,您也可以在函数中看到,它只读取json文件并返回json对象

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很高兴能帮上忙。如果你对答案满意,你能把它标记为接受吗?那就是我得到了一些神奇的互联网积分。