如何同步Angular2 http get?

Hul*_*ulk 20 javascript typescript angular2-http angular

我理解使用observable我可以在请求完成时执行一个方法,但是我怎么能等到http get完成并使用ng2 http返回响应?

getAllUser(): Array<UserDTO> {
    this.value = new Array<UserDTO>();
    this.http.get("MY_URL")
                    .map(res => res.json())
                    .subscribe(
                        data => this.value = data,
                        err => console.log(err),
                        () => console.log("Completed")
    );

    return this.value;
} 
Run Code Online (Sandbox Code Playgroud)

返回时,"value"将为null,因为get是异步的..

Cha*_*ani -10

您不应该尝试使 http 调用同步运行。从来都不是一个好主意。

在您的getAllUser实现中,它应该从函数返回一个可观察值,并且调用代码应该订阅,而不是您在方法本身内部创建订阅。

就像是

getAllUser(): Observable<UserDTO> {
        return this.http.get("MY_URL")
                        .map(res => res.json());
} 
Run Code Online (Sandbox Code Playgroud)

在您调用代码时,您应该订阅并做任何您想做的事情。

  • 此回复提供了问题的替代实施方式,我很欣赏您的回复。然而,这并不能回答问题。有没有办法同步http请求呢?我正在寻找同一问题的答案,并且我可以阻止浏览器(事实上我希望如此),直到得到答复。 (32认同)
  • 这个答案只是建议不要使用sync xhr,它从不解释问题用例中的原因,甚至以任何方式回答问题,而只是提供另一个问题的答案。 (2认同)