Mat*_*ias 21 observable rxjs angular-http angular angular-httpclient
在 Angular 中,我们使用 HttpClient 进行 HTTP 调用,该调用返回可观察值,如果我们想使用 Promise,我们可以使用lastValueFrom/firstValueFrom.
假设我们有:
async getLast() {
const get$ = this.http.get(url);
const res1 = await lastValueFrom(get$);
}
async getFirst() {
const get$ = this.http.get(url);
const res2 = await firstValueFrom(get$);
}
Run Code Online (Sandbox Code Playgroud)
res1 和 res2 总是相等吗?正确使用的版本是什么?
lag*_*man 28
在Angular HTTP 客户端中,是的,它们是。这就是为什么:
observer.next(new HttpResponse({
body,
headers,
status,
statusText,
url: url || undefined,
}));
// The full body has been received and delivered, no further events
// are possible. This request is complete.
observer.complete();
Run Code Online (Sandbox Code Playgroud)
之后observer.next(...),observer.complete()被同步调用。lastValueFrom由于这是同步调用,因此使用or没有区别firstValueFrom。
这里唯一的区别是,一旦被调用firstValueFrom就会解决 Promise ,而一旦被调用就会解决 Promise 。由于和被同步调用,一个接一个,所以这里实际上没有太大区别。next(...)lastValueFromcomplete()nextcomplete
但是,这里需要注意的一件事是:如果您正在使用reportProgress = true,您将需要使用lastValueFrom,因为您希望捕获从生产者发出的最后一个值 - 即响应或错误。您不想通过进度状态更新来解决 Promise。如果你这样做,那么你根本就不想使用 Promise。
在基本用法中HttpClient.get(url)- 没有任何附加选项,例如observe: events或reportProgress: true- 两个版本是等效的,您可以使用您喜欢的任何一个。observable只会发射一次或失败,因此 和 的lastValueFrom行为firstValueFrom都是相同的。
| 归档时间: |
|
| 查看次数: |
21719 次 |
| 最近记录: |