Angularjs RxJS可观测,何时取消订阅?

Angularjs RxJS可观测,何时取消订阅?,angularjs,angular,rxjs,angular2-observables,angular4,Angularjs,Angular,Rxjs,Angular2 Observables,Angular4,我有几个关于角度的问题。我最近开始尝试Angular,但我真的不知道什么时候应该取消订阅,显然建议使用AsyncPipe,但在某些情况下没有办法使用它 如果我订阅了服务中的HTTP请求,那么可观察到的请求是自行取消订阅,还是在整个应用程序生命周期中一直持续 当我订阅(不使用AsyncPipe)组件中的HTTP请求时,我可以在Ngondestry生命周期挂钩中手动取消订阅,这很好,但在我的情况下,我有一个submit方法来创建帐户 account.component.html 在更全面地处理可

我有几个关于角度的问题。我最近开始尝试Angular,但我真的不知道什么时候应该取消订阅,显然建议使用AsyncPipe,但在某些情况下没有办法使用它

  • 如果我订阅了服务中的HTTP请求,那么可观察到的请求是自行取消订阅,还是在整个应用程序生命周期中一直持续

  • 当我订阅(不使用AsyncPipe)组件中的HTTP请求时,我可以在Ngondestry生命周期挂钩中手动取消订阅,这很好,但在我的情况下,我有一个submit方法来创建帐户

account.component.html


在更全面地处理可观察事物和函数编程时,您需要考虑的是,您不描述事物是如何完成的,而是描述事物是什么

在您的示例中,集合一方面是从服务的初始获取,另一方面是可能发生的所有更新的组合,因此,如果要避免订阅组件,可以执行以下操作:

class Foo {
  public collection$: Observable < Account[] > ;
  private createAccount$ = new Subject<Account>();

  constructor(
    private service: AccountService
  ) {}

  ngOnInit() {
    let initialAccounts = this.service.getAll().share();
    let accountUpdate = initialAccounts.switchMap(()=>this.createAccount$.switchMap(account=>{
      return this.service.create(account).switchMap(()=>this.service.getAll())
    }))
    this.collection$ = Observable.merge(initialAccounts,accountUpdate);
  }

  createAccount(obj:Account) {
    this.createAccount$.next(obj);
  }

}
class-Foo{
公共集合美元:可观察<账户[]>;
私有CreateCount$=新主题();
建造师(
私人服务:会计服务
) {}
恩戈尼尼特(){
让initialAccounts=this.service.getAll().share();
让accountUpdate=initialAccounts.switchMap(()=>this.createAccount$.switchMap(account=>{
返回this.service.create(account.switchMap)(()=>this.service.getAll())
}))
this.collection$=Observable.merge(initialAccounts,accountUpdate);
}
创建帐户(对象:帐户){
此.createAccount$.next(obj);
}
}
我们在这里使用
merge
操作符从
initialAccounts
createAccount$
获取数据。将您的可观察对象组合在一起并订阅一次总是一件好事,因为这样您就不必强制管理订阅


事实上,大多数情况下,您根本不需要
subscribe()

不必担心取消订阅http请求的可能重复->这些请求是有限的,因为您只需要发出一个请求,然后返回数据,仅此而已。例如,无限订阅就是对用户输入的订阅。另外,您不必提供错误函数->您只需删除这一行即可。@echonax哦,是的,我还没有看到这一行,看起来它很好地解释了我问题的有限部分和无限部分。@charlie_pl如果我想订阅我的http请求,Angular将负责订阅,在我收到回复后还剩下什么?
public collection$: Observable<Account[]>;
private subscription: Subscription;

 constructor(
  private service: AccountService
 ) {}

 ngOnInit() {
   this.collection$ = this.service.getAll()
 }

 createAccount(obj) {
  this.subscription = this.service.create(obj)
   .subscribe(
    success => this.collection$ = this.service.getAll(),
    error => Observable.throw(error)
  );
}

ngOnDestroy() {
 this.subscription.unsubscribe();
}
 getAll() {
  return this.http.get(ENDPOINT_ACCOUNT)
    .map((response: Response) => response.json().data)
}
class Foo {
  public collection$: Observable < Account[] > ;
  private createAccount$ = new Subject<Account>();

  constructor(
    private service: AccountService
  ) {}

  ngOnInit() {
    let initialAccounts = this.service.getAll().share();
    let accountUpdate = initialAccounts.switchMap(()=>this.createAccount$.switchMap(account=>{
      return this.service.create(account).switchMap(()=>this.service.getAll())
    }))
    this.collection$ = Observable.merge(initialAccounts,accountUpdate);
  }

  createAccount(obj:Account) {
    this.createAccount$.next(obj);
  }

}