如何在 Angular 中顺序执行回调

问题描述 投票:0回答:1

如何强制 Angular 在 ngOnInit 中恢复执行之前等到获取数据完全完成:

fetchdata() {
    console.log('2')
   
   this.http.get("http://jsonplaceholder.typicode.com/users").subscribe(
     (data) => {
         console.log('3')
         return data
    })
}

ngOnInit() {
    console.log('1')
    this.httpdata = this.fetchdata()
    console.log('4')
}

在上面的例子中,

console.log
的顺序是1,2,4,3

我知道 httpclient 的 get 函数是异步的,但是我怎样才能让我的 fetchdata 函数也异步呢?

只需将函数声明为 async 即可使 console.log 保持相同的顺序,并且也会抛出执行时间错误:

async fetchdata() {
    console.log('2')
    this.http.get("http://jsonplaceholder.typicode.com/users").subscribe(
     (data) => {
        console.log('3')
        return data
    })
}

如何将我的函数 fetchdata 声明为可观察的?

angular asynchronous observable
1个回答
0
投票

请使用管道和

map
运算符进行额外的操作,然后您可以在最后订阅以使动作顺序执行!

fetchdata() {
    console.log('2')
   
    return this.http.get("http://jsonplaceholder.typicode.com/users").pipe(
        map((data) => {
             console.log('3')
             return data;
        })
    );
}

ngOnInit() {
    console.log('1')
    this.fetchdata().subscribe((data) => {
        this.httpdata = data;
        console.log('4')
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.