Angularjs RxJS可观测,何时取消订阅?
我有几个关于角度的问题。我最近开始尝试Angular,但我真的不知道什么时候应该取消订阅,显然建议使用AsyncPipe,但在某些情况下没有办法使用它Angularjs RxJS可观测,何时取消订阅?,angularjs,angular,rxjs,angular2-observables,angular4,Angularjs,Angular,Rxjs,Angular2 Observables,Angular4,我有几个关于角度的问题。我最近开始尝试Angular,但我真的不知道什么时候应该取消订阅,显然建议使用AsyncPipe,但在某些情况下没有办法使用它 如果我订阅了服务中的HTTP请求,那么可观察到的请求是自行取消订阅,还是在整个应用程序生命周期中一直持续 当我订阅(不使用AsyncPipe)组件中的HTTP请求时,我可以在Ngondestry生命周期挂钩中手动取消订阅,这很好,但在我的情况下,我有一个submit方法来创建帐户 account.component.html 在更全面地处理可
- 如果我订阅了服务中的HTTP请求,那么可观察到的请求是自行取消订阅,还是在整个应用程序生命周期中一直持续
- 当我订阅(不使用AsyncPipe)组件中的HTTP请求时,我可以在Ngondestry生命周期挂钩中手动取消订阅,这很好,但在我的情况下,我有一个submit方法来创建帐户
在更全面地处理可观察事物和函数编程时,您需要考虑的是,您不描述事物是如何完成的,而是描述事物是什么 在您的示例中,集合一方面是从服务的初始获取,另一方面是可能发生的所有更新的组合,因此,如果要避免订阅组件,可以执行以下操作:
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);
}
}