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

在提交表单上可观察到的2个RxJS不可分字段

唐兴贤
2023-03-14

这可能是一个基本的问题,但没有找到任何充分的答案。所以我觉得创造一个。

我有一个表单,它有一个提交处理程序。

<form class="form login" [formGroup]="loginForm" (ngSubmit)="onSubmit()" novalidate>

在提交时,我调用了一个订阅observable的函数,该函数执行对firebase的HTTP调用(使用AngularFire2库)。

public onSubmit() : void {
    const values = this.loginForm.value;

    let subscription = this.loginUsernamePassword(values.email, values.password).subscribe((data) => {
        this.processLogin(data);
    }, (error) => {
        console.log("erreur" + error);
    }, () => {
        console.log("one");
    });
}

3)..其他的吗?

谢谢你的帮助和提示。

共有1个答案

凤修筠
2023-03-14

在组件中处理长期订阅的一种方法是通过向订阅添加一个条件来确保它们被释放,如...

export class MyClass implements OnInit, OnDestroy {
  public isDestroyed = false;
  public someData: Observable<SomeData>;

  public ngOnInit() {
    this.someData = {some other source}
    .takeWhile(!this.isDestroyed)
    .subscribe(x => x...........);
  }

  public ngOnDestroy() {
    this.isDestroyed = true;
  }
}

虽然我怀疑父observable可能会保留这个订阅,直到next值传递出去,然后它发现订阅者不再感兴趣。使用takeuntil可能更好,因为这需要一个可观察的,您可以调用next来立即终止订阅。

但在您的情况下,这实际上取决于此.LoginUsernamePassword做了什么。如果它是基于http调用的订阅,那么http创建的主题无论如何都将被销毁,然后您的本地订阅也将随之消失。

 类似资料:
  • 我正在努力理解rxJs观察者/可观察的。 我有一个Angular应用程序,其中一个服务创建一个可观察的: 闲聊服务ts: 当聊天室中收到消息时。服务ts,消息(假定)是多播的: 两个组件以这种方式订阅可观察对象: 问题:只有一个(最后一个订阅的)收到消息。 问:我如何配置可观察到多播到所有订阅者?

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

  • 有人能向我解释一下为什么运算符可以接受返回或的函数吗? 官方文件说: FlatMap运算符通过将您指定的函数应用于源可观察对象发出的每个项目来转换可观察对象,其中该函数返回本身发出项目的可观察对象。 为什么它也可以返回数组? 例如,它们都是有效的: 但这不起作用:

  • 我试图将一个角度函数转换为可观察模式,因为它的当前实现与它有一些异步性。为了讨论这个问题,我们举一个简单的例子。 可以通过以下方式将其转换为使用可观察对象: 我所面临的问题(据我所知)是针对无法访问内部选择语句的情况。 如果使用常规主题,订阅函数肯定不会得到任何值,因为事件的顺序是: 函数被调用 主题已创建 值已设置 调用函数订阅,因此仅在此事件发生后获取值 如果使用了BehaviorSubjec

  • 我正在开发一个功能,我需要根据本地数据库数据过滤掉网络响应数据。 例如,我的网络层返回一个项目列表,我的数据库层返回一个可观察的ID列表。现在,我只想从网络层返回那些id与数据库层响应中的任何人都匹配的对象。 下面的代码从网络获取数据并将结果保存到数据库(缓存)。 我还有一个方法可以返回需要过滤的场馆列表 现在,我如何扩展前面的链,使用getDislikedVinces()observate从网络

  • 我正在学习RxJS,对于“听众”在哪里(在可观察的或观察者中),他们是如何订阅/取消订阅的,以及当观察者“不再对”可观察的“不感兴趣”时会发生什么,比如当你使用或。 对于第一部分——什么是订阅什么,什么是倾听者——我对这些陈述之间看似矛盾的地方感到困惑。从http://reactivex.io/rxjs/manual/overview.html我们读到观察者不是观察者的“听众” 这与addEven