强制等待Angular中的HTTP获取请求直到完成

时间:2018-09-07 09:46:14

标签: angular

我的服务代码如下:

 async read() {
        let p = await this.http.get('/api/setting').toPromise();
        this.data= p.json();
    } 

我正在如下组件的ngInit()方法中调用该服务方法:

ngOnInit() {
        this._settings.read();
        this.getAll();
    }

我的问题是getAll()方法与read()方法同时运行。

但是我想在getAll()完成后运行read()方法。我该怎么办?

PS:我的棱角版本是4.2.5,我不想更改它。

3 个答案:

答案 0 :(得分:1)

您的read方法是异步的。您需要像这样await

async ngOnInit() {
    await this._settings.read();
    this.getAll();
}

答案 1 :(得分:0)

如果确实需要进行同步调用,则始终可以使用纯JavaScript:

public myFunction() {
    var r = new XMLHttpRequest();
    r.open("GET", 'https://filltext.herokuapp.com/?rows=1&name={firstName}', false);
    r.send();
    return JSON.parse(r.responseText)[0];
}

答案 2 :(得分:-1)

您可以通过多种方式实现这一目标。一种方法是使用Observable订阅

pmatch("me",   c("mean", "median", "mode")) 
[1] NA  # returns NA instead of 1,2 since multiple partial matches

pmatch("mo",   c("mean", "median", "mode")) 
[1] 3   # since single partial match