angular - 用 rxjs 替换两个连续的 setTimeout

标签 angular rxjs

在 Angular 应用程序中,我们执行一个方法。并且我们需要在调用此方法后触发另外两个间隔时间的方法。
Method call -> wait 150 ms ----> second action -> wait 300 ms -------- > third action
我可以设置两个嵌套 setTimeout .它有效,但我觉得它很难看。

public toggleSideContainer() {
    this.myLayoutService.toggleSideContainer();

    setTimeout(() => {
        this.renderer.addClass(this.mainContainer, 'side-container');

        setTimeout(() => {
            this.renderer.addClass(this.sideContainer, 'open');
        }, 300);
    }, 150);
}

以正确的 rxjs 方式获得此结果的正确 rxjs 运算符/序列是什么?

最佳答案

Observable.of(true)
    .delay(150)
    .do(() => {
        this.renderer.addClass(this.mainContainer, 'side-container');
    })
    .delay(300)
    .do(() => {
        this.renderer.addClass(this.sideContainer, 'open');
    });

或者使用新的可出租/可管道运营商:

Observable.of(true).pipe(
    delay(150),
    tap(() => {
        this.renderer.addClass(this.mainContainer, 'side-container');
    }),
    delay(300),
    tap(() => {
        this.renderer.addClass(this.sideContainer, 'open');
    })
);

来源:https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

关于angular - 用 rxjs 替换两个连续的 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48625049/

相关文章:

javascript - Angular 2在订阅方法中设置值问题

angular - 无法在 'open' : Invalid URL 上执行 'XMLHttpRequest'

javascript - Angular 与 TypeScript - 如何在可观察回调中处理业务逻辑?

rxjs - 在 RxJS 中取消订阅主题

javascript - 我如何等待多个结果,然后根据接收到的数据过滤它们?

javascript - 在不同的屏幕尺寸下动态改变另一个 div 的位置

angular - Angular 6 中的图像尺寸验证

angular - 如何在 Angular 9 中将分页与 Observables 和 AsyncPipe 结合起来?

typescript - Typescript 的 Rxjs 类型

javascript - 仅在第二次触发源 observable 后才会重新订阅