rxjs:如何理解这个组合的最新行为
rxjs: how to understand this combinelastest behavior
在我的应用程序中,我遇到了与 combineLatest
运算符相关的奇怪行为。我通过在线演示重现了这个问题:
注意:请忽略此demo中的业务逻辑,不太合理,我只是想在技术层面重现这个问题。
https://stackblitz.com/edit/angular-qcdslo?file=src/app/app.component.ts
private testRequest() {
this.pokemon$ = combineLatest(this.limit$, this.offset$)
.pipe(
map(data => ({limit: data[0], offset: data[1]})),
switchMap(data => this.pokemonService.getPokemon(data.limit, data.offset)),
map((response: {results: Pokemon[]}) => response.results),
);
}
此方法使用 combineLatest 组合两个可观察值:limit$ 和 offset$。并向 API 发送请求,其中 limit 和 offset 的值只是 API 的参数。
并且我在以下方法中每 5 秒将计数器值增加 1:
let counter = 1
setInterval(() => {
this.offsetControl.setValue(counter)
counter++;
}, 5000)
最后,出于某种原因,我需要每隔 6 秒调用一次 testRequest 方法,方法如下:
setInterval(() => {
this.testRequest();
}, 6000)
那么网络请求行为如下:
limit=5&offset=0
limit=5&offset=1
limit=5&offset=0
limit=5&offset=2
limit=5&offset=0
limit=5&offset=3
...
limit=5&offset=0
limit=5&offset=n
我不明白为什么 limit=5&offset=0
会反复发生。谢谢。
每次执行 testRequest 时,您都在创建一个新的 observable,这不是您想要做的,每次您重新创建 observable 时,您都会获得调用 startsWith 时为零的 startsWith 值。
去掉最新的组合,只从表单控件中提取值。
https://stackblitz.com/edit/angular-droqf6?file=src/app/app.component.ts
在我的应用程序中,我遇到了与 combineLatest
运算符相关的奇怪行为。我通过在线演示重现了这个问题:
注意:请忽略此demo中的业务逻辑,不太合理,我只是想在技术层面重现这个问题。
https://stackblitz.com/edit/angular-qcdslo?file=src/app/app.component.ts
private testRequest() {
this.pokemon$ = combineLatest(this.limit$, this.offset$)
.pipe(
map(data => ({limit: data[0], offset: data[1]})),
switchMap(data => this.pokemonService.getPokemon(data.limit, data.offset)),
map((response: {results: Pokemon[]}) => response.results),
);
}
此方法使用 combineLatest 组合两个可观察值:limit$ 和 offset$。并向 API 发送请求,其中 limit 和 offset 的值只是 API 的参数。
并且我在以下方法中每 5 秒将计数器值增加 1:
let counter = 1
setInterval(() => {
this.offsetControl.setValue(counter)
counter++;
}, 5000)
最后,出于某种原因,我需要每隔 6 秒调用一次 testRequest 方法,方法如下:
setInterval(() => {
this.testRequest();
}, 6000)
那么网络请求行为如下:
limit=5&offset=0
limit=5&offset=1
limit=5&offset=0
limit=5&offset=2
limit=5&offset=0
limit=5&offset=3
...
limit=5&offset=0
limit=5&offset=n
我不明白为什么 limit=5&offset=0
会反复发生。谢谢。
每次执行 testRequest 时,您都在创建一个新的 observable,这不是您想要做的,每次您重新创建 observable 时,您都会获得调用 startsWith 时为零的 startsWith 值。
去掉最新的组合,只从表单控件中提取值。
https://stackblitz.com/edit/angular-droqf6?file=src/app/app.component.ts