【问题标题】:get last emitted value from observable angular 7从可观察的角度 7 中获取最后发出的值
【发布时间】:2020-04-04 10:58:15
【问题描述】:

在下一次单击时,将值发射到 observable 能够获取但它首先被调用 n 次,它在下一次获取对象时获取空值。所以我需要写一个 if 条件,如果值不为空,然后执行一些逻辑。那么有没有办法获得最终完成的值所以尝试了像 last take(1) 和行为主题这样的 rxjs 运算符,但是它们都没有工作附加代码 sn-p 在编写 observable 时有什么问题

savePersonalInfo$ = new Subject<any>();     
get savePersonalInfo() {
    return this.savePersonalInfo$.asObservable();
}

我的服务文件看起来像这样,其中尝试使用行为主题创建主题但没有运气。

onClickedNext(){
  // this.isContinueClicked = true;
  // this.shared.coapplicantForm = this.register;
  this.shared.isFromNext = true;
  this.shared.savePersonalInfo$.next({value: 'clicked'});

}

在下一次点击事件中发出值,因此它来自导航组件。

this.shared.savePersonalInfo.subscribe(resp => {
 if (resp.value != "") {
 }
});

代码试图在此处获取发出的值,它最初需要获取最新值它变空这是另一个组件,在下次单击时需要将数据保存在个人组件中,因此如果条件数据是否可用,则在其他地方写入它发送对象的代码在这种情况下如何区分,因为它得到了对象。

【问题讨论】:

  • 看起来您可以只使用filter(Boolean)skip(1)filter(whatever logic) 运算符。
  • @martin 如果没有这些过滤器,是否有任何方法,如果每次从 api 获取大对象,只是对象中的一个键更改在这种情况下如何做
  • 您能在 stackblitz 中分享您的问题吗?
  • 如果我理解你是正确的,只要有点击事件,你就会订阅你的最后一个 sn-p。这可能会导致您在订阅之前释放您的价值。您应该明确地在 stackblitz 链接中发布一个完整的示例。您可能想使用 shareReplay(num) 运算符,但很难说

标签: angular rxjs observable subject


【解决方案1】:

您可以使用 skipWhile 运算符来检查发出的值是否为空。以下代码块可能会对您有所帮助。

this.shared.savePersonalInfo.pipe(skipWhile(value => !value)).subscribe(res => {
 console.log(res);
});

【讨论】:

    【解决方案2】:

    您需要使用ReplaySubject。它向每个新订阅者发出最后一个值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2019-10-28
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多