【问题标题】:I would like to have an observable behaving like a promise我希望有一个可观察的行为,就像一个承诺
【发布时间】:2018-02-26 12:50:37
【问题描述】:
var promise = http.get().toPromise(); 给出一个执行一次的承诺。
所以无论promise.then() 被调用多少次,http 请求都只会执行一次。
如何使用 observable 实现相同的功能?:var observable = http.get().??? 以便 obversable.subscribe() 只执行一次 http 请求?
【问题讨论】:
标签:
rxjs
angular5
rxjs5
angular4-httpclient
【解决方案1】:
你可以像这样使用下面的 rxjs 操作符 'take'
导入运算符
import { take } from 'rxjs/operators';
并像这样使用它
this.http.get(`${this.url}/${agentId}/intents/${intentId}`)
.pipe(take(1),
catchError(error => Observable.throw(error)));
但这只会发出一个值,即最新值,如果您再次调用此函数,则不会阻止 Observable 调用请求。
【解决方案2】:
下面的代码做到了:
从 'rxjs/operators' 导入 { shareReplay };
this.http.get("xxx").pipe(shareReplay(1));