小编see*_*ode的帖子

什么 rxjs 运算符类似于 concatmap 但在触发下一个请求之前等待每个请求?

例如,假设我想进行一些 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)

rxjs rxjs5 angular

4
推荐指数
1
解决办法
1679
查看次数

如果我已经在使用OnPush更改检测,在什么情况下我应该使用runOutsideAngular

我已经在使用不可变数据进行OnPush变更检测.我想知道我可以通过使用ngZone.runOutsideAngular进行更改检测吗?我只是在这里寻找一些指导方针.

angular

4
推荐指数
1
解决办法
481
查看次数

标签 统计

angular ×2

rxjs ×1

rxjs5 ×1