如何将HttpRequest中的值直接返回到变量中

时间:2019-12-06 12:47:05

标签: angular http observable

我有一个请求:

// api-service.ts
getUsers() {
    return this.http.get(this.BaseUrl + 'users/', httpOptions);
}

我想将结果设置为这样的变量:

// users-component.ts
ngOnInit() { 
    this.users = this.api.getUsers();
}

当前,我必须执行以下操作:

// users-component.ts
ngOnInit() { 
    this.api.getUsers().subscribe(res => {
        this.users = res;
    })
}

我尝试这样的事情:

// api-service.ts
getUsers() {
    return this.http.get(this.BaseUrl + 'users/', httpOptions).pipe(
     map (res => { return res; })
    );
}

但这不起作用。

我只是想将此请求的结果设置为一个变量,而不使用我的变量所在的订阅。

谢谢

2 个答案:

答案 0 :(得分:3)

实际上您可能不想这样做,但是让我来解决这个问题。

如果您确实想这样做:请使用Promise

您始终可以使用toPromise()函数将请求转换为Promise。但是:

角度都是可见的

Angular已将Observable广泛应用于其组件中,因此也应与它们一起使用。这样做可以带来很多好处。 例如,您无需等待客户端检索所请求的数据,而可以执行其他操作。

可观察对象无法像您希望的那样工作

Observable返回的httpClient(或与此相关的任何Observable)不包含您想要获取的值,它代表管道,一旦任何{{ 1}}。

意味着除非订阅,否则此流将不会输出任何数据。

如果您不想像上面那样手动进行订阅,则由于担心内存泄漏和未关闭的订阅,可以使用subscription角度提供。 该管道为您订阅了一个可观察对象,并将其转换为提供的最新值。

答案 1 :(得分:2)

您可以这样做:

// users-component.ts
async ngOnInit() { 
    this.user = await this.api.getUsers().toPromise();
}

编辑:

即使我为您的问题建议了toPromise()的方式,我也不喜欢所有异步等待的东西。观测值与rxjs运算符结合可以使您成为魔术师。学习曲线很高,但确实很有意义。我建议存储可观察对象,并按照@Chund的建议使用异步管道进行订阅。