例如,假设我想进行一些 api 调用。我正在处理的 api 容易出现竞争条件,因此如果我同时进行 3 个 api 调用来更新服务器上的同一条数据,它可能会丢失一些数据。
因此,我想对我的请求进行排队,然后在触发下一个请求之前等待响应返回。
基本上我需要像 concatMap 这样的东西,但是 concatMap 的问题是它同时触发所有请求。我需要 concatMap 在触发下一个请求之前等待。我正在使用 rxjs 5。
这是一个使用 angular2 的 plunker,您可以在其中单击按钮。当您单击 1 sec 按钮时,将创建一个 observable 并在 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 …Run Code Online (Sandbox Code Playgroud) 我已经在使用不可变数据进行OnPush变更检测.我想知道我可以通过使用ngZone.runOutsideAngular进行更改检测吗?我只是在这里寻找一些指导方针.