使用 http 客户端从服务器获取值并将其用于后续步骤

Posted

技术标签:

【中文标题】使用 http 客户端从服务器获取值并将其用于后续步骤【英文标题】:Using http client to get a value from server and using it for next steps 【发布时间】:2020-07-17 19:05:42 【问题描述】:

我有一个如下函数,我需要调用服务器并获取函数返回的值。我正在使用 rxjs 订阅。我得到了值,但由于 rxjs 是异步的,因此函数在从服务器获取值之前返回。下面是一个伪代码来解释我想要做什么:

..

let myValue = getValue();
private getValue(): string 
	let val = '';
    this.httpClient.get('/server url',  observe: "response" ).subscribe(res => 
                val = res.headers.get('X-Some-Header-Name');
            );
    return val;

..

我知道 susbscribe 会立即返回,因此函数 getValue 不会从服务器返回值。有没有办法让函数只在可观察返回时才返回值?

【问题讨论】:

不,见***.com/questions/38291783/… 您不能从异步请求中返回同步数据。您可以将值分配给订阅内的变量,或者如果您需要在模板中使用变量,请直接在模板中使用带有 async 管道的 observable。 【参考方案1】:

正如@satanTime 在his answer 中已经指出的那样,您应该使用HttpClient 返回的Observable

然后,您还可以使用async pipe 在模板中使用myValue,例如:

<p>myValue | async</p>

参考:https://angular.io/guide/observables-in-angular

【讨论】:

【参考方案2】:

如果您需要等待响应,那么您需要返回一个 observable 并在您需要该值的地方订阅它。

let myValue = getValue();
private getValue(): Observable<string> 
    return this.httpClient.get('/server url',  observe: "response" ).pipe(
        map(res => res.headers.get('X-Some-Header-Name')),
    );

【讨论】:

以上是关于使用 http 客户端从服务器获取值并将其用于后续步骤的主要内容,如果未能解决你的问题,请参考以下文章

gomain函数中如何动态获取数据

postman实现从response headers中获取cookie,并将其设置为环境变量

从输入字段中获取一个值并将其传递给 Paypal

如何从 Jpanel 中的 JTextField 获取值并将其发送到其他 JPanel?

从对象获取属性值并将其分配给javascript中的变量

有没有办法获取选项标签值并将其传递给车把中的助手?