例如,假设我想进行一些API调用。我正在处理的api很容易出现竞争状况,所以如果我在同一时间更新服务器上的同一条数据时发出3个api调用,它可能会丢失一些数据。rxjs运算符与concatmap类似,但在发射下一个请求之前等待每个请求?
因此,我想排队我的请求,然后在发出下一个请求之前开启等待响应返回。
基本上我需要类似concatMap的东西,但concatMap的问题是它同时触发所有的请求。我需要concatMap在发射下一个请求之前等待。我正在使用rxjs 5.
这里是一个使用angular2的插入程序,您可以在其中单击按钮。当你点击1秒按钮时,一个观测值将被创建,并在1秒后返回。有2秒和3秒按钮。
https://plnkr.co/edit/6F4JrVueQX8PjPinZqIk?p=preview
@Component({
selector: 'my-app',
template: `
<div>
<h2>Wait:</h2>
<button (click)="start(1)">1 sec</button>
<button (click)="start(2)">2 sec</button>
<button (click)="start(3)">3 sec</button>
</div>
`,
})
export class App {
constructor() {
}
start(wait) {
const waitSecs = parseInt(wait) * 1000;
of('clicked').delay(waitSecs).subscribe(
val => console.log(wait)
)
// Expected behavior:
// I click 3 sec, 2 sec, and 1 sec right after another. Then
// the console log should output 3, 2, 1. Right now it's
// outputting 1, 2, 3.
}
}
我点击3秒,2秒,并在之后将另1秒后,我与这个应用程序的理想行为会。然后控制台应该输出3,2,1。现在它是 输出1,2,3.
这个工程,我更新了我的掠夺者,我不再得到这个问题:https://plnkr.co/edit/EtC8czwAzhRaMEmrTG0s?p=preview – seescode