在angular中,我们使用HttpClient进行超文本传输协议调用,返回一个observable,如果我们想使用promises,我们可以使用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$);
}
res1和res2总是等价的吗?要使用的正确版本是什么?
发布于 2021-10-19 12:12:46
在Angular HTTP client中,是的,它们是。This is why
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();
在observer.next(...)
之后,同步调用observer.complete()
。因为这是一个同步调用,所以使用lastValueFrom
或firstValueFrom
没有区别。
这里唯一的区别是firstValueFrom
将在next(...)
被调用时解析Promise,而lastValueFrom
将在complete()
被调用时解析Promise。因为next
和complete
是一个接一个地同步调用的,所以这里实际上没有太大的区别。
然而,这里需要注意的一件事是:如果您使用的是reportProgress = true
,那么您将希望使用lastValueFrom
,因为您希望捕获生产者发出的最后一个值-即响应或错误。您不希望使用进度状态更新来解析Promise。如果您这样做了,那么您根本就不想使用Promise。
https://stackoverflow.com/questions/69629634
复制相似问题