当前位置: 首页 > 知识库问答 >
问题:

使用Rxjs管道如何知道何时可观察完成?

隗翰海
2023-03-14

在角度分量的顶部有以下初始化。

public myDataObservable$: Observable<MyData[]>;

在我的组件中的某个地方,我使用选择器对Ngrx存储进行以下调用,以获取可观测数据。所有这些都很好,我得到了我想要的数据。

this.myDataObservable$ = this.store.pipe(select(MyDataStore.getMyData));

我需要知道这个可观察的什么时候完成。我需要设置一个布尔值,当所有可观察到的数据都试图完成时,它将关闭加载指示器。这是通过Web服务完成的。

因为可观测的源来自其他地方,所以我无法挂起“完整”回调()=

我尝试过各种Rxjs操作符,如TakeTo和Finize,但运气不佳。这些操作员会立即被呼叫,我的装载指示器会以上升的速度关闭。

我浏览了互联网,尝试了许多不同的解决方案,但我找不到答案。谢谢你花时间看这个。


共有2个答案

从渊
2023-03-14

解决方案是将加载指示器的布尔值置于状态,并将其设置在减速器中。当数据填充时,将调用加载缩减器,并且状态布尔值设置为true。调用loading success reducer时,状态布尔值将变为false。

之后,我创建了一个选择器来获取布尔状态。

我现在将其初始化为一个可观察的布尔值,在我的ngOnInit方法中,我可以声明以下内容:,

this.showLoading$ = this.store.pipe(select(TechnopediaStore.getisLoadingData));

因此,我只需将其应用于我的代码中的structure指令。html和它的工作非常完美。

屈昊天
2023-03-14

我不是100%确定你想要什么;但是为什么下面的代码不起作用呢?我不知道您正在使用哪种类型的存储(ngxs、ngrx、?)。存储中可能有一个属性,用于在调用时设置加载指示器。然后,当它成功返回或出现错误时,可以再次以状态更新它。

this.myDataObservable$ = this.store.pipe(select(MyDataStore.getMyData));

this.myDataObservable$.subscribe(
  next: x => console.log('Observer got a next value: ' + x),
  error: err => console.error('Observer got an error: ' + err),
  complete: () => this.loadingIndicator = false),
);

 类似资料:
  • 我们有一个执行http请求的请求服务。所有请求都实现IRequest接口,该接口包含http方法和一个执行函数,该函数依次返回另一个可观察的对象。 RequestService有一个重载,它接受一个源可观察对象,还有一个requestfactory,它根据源可观察对象的值返回一个IRequest实例。 当然,在服务中做了更多的工作(日志记录、默认错误处理,...),但大多数与问题无关。 现在,这一

  • 以下代码未订阅: 但是如果我这样做,它确实订阅: 更新:这个工作太 但当我添加逻辑时,它并没有 我遵循RxJS官方文档:https://rxjs-dev.firebaseapp.com/api/operators/find 我甚至必须在,当我执行时,什么也不会打印出来。我也尝试过使用管道。 对象: 我传递的昵称是将对象与“Devpato”进行比较

  • 使用RxJS如何在观察者上传递新属性?所以基本上我希望道具“customProp”可以被观察到 添加更多的信息-所以基本上,我试图创建一个冷可观察的,其中制片人需要一个道具,应该来自订户 添加用法信息--coldObservable是DB连接函数,customProp是需要在DB上执行的查询

  • 我对Observables和RxJs是新手,我想对回报进行调整。如果第一个选择器返回某个值,我希望第二个选择器可以观察到。但是如果第一个选择器没有返回那个特定的值,我想返回false,而不是(false)。我已经走了这么远,但这返回了一个可观察的结果

  • 问题内容: 我有一个带有行的表格样式页面。每行都有一个复选框。我可以选中所有/很多复选框,然后单击“提交”,这是对每一行的Jquery ajax调用。 基本上,我为每一行都有一个表单,并且遍历所有选中的行并提交执行jquery ajax调用的表单。 所以我有一个按钮,它可以: 那么每一行都有: 该表格提交给processRow: 我想知道的是,通过这种方法,我可以判断出我所有的Ajax调用是否均已

  • 我对angular是个新手,开始学习angular 4。数据未与使用异步管道的组件上的指令绑定。请帮忙 用户服务使用HTTP请求从API获取数据: user.service.ts 在这里,我使用用户列表的可观察用户[]界面: user.component.ts 订阅可观察用户变量的异步管道模板: user.component.html