Javascript rxjs中的错误和完整方法是如何工作的?
最近我读到了关于rxjs的文章。此代码来自文档Javascript rxjs中的错误和完整方法是如何工作的?,javascript,rxjs,Javascript,Rxjs,最近我读到了关于rxjs的文章。此代码来自文档 import { Observable } from 'rxjs'; const observable = new Observable(subscriber => { setTimeout(() => { subscriber.complete(); subscriber.next(1); }, 1000); }); observable.subscribe({ next(x) { console.
import { Observable } from 'rxjs';
const observable = new Observable(subscriber => {
setTimeout(() => {
subscriber.complete();
subscriber.next(1);
}, 1000);
});
observable.subscribe({
next(x) { console.log('got value ' + x); },
error(err) { console.error('something wrong occurred: ' + err); },
complete() { console.log('done'); }
});
console.log('just after subscribe');
正如上面所说的,如果发送了错误或完整的通知,那么之后就不能再发送其他通知了。如何使用纯js在引擎盖下完成?有没有一种方法可以改变subscribe函数并在执行complete/error方法时动态返回?RxJS的工作方式非常有趣。我在这里分享了我的观点。我试图讲述
可观察的.pipe
,可观察的.subscribe
以及主题.observators
如何在引擎盖下工作
但要点是这样的(同样,这是我花了一些时间阅读源代码后的观点):
RxJS通过链接列表实现其功能
基本上,有两个链表。一个是在Observable.pipe()
的帮助下创建的,其节点由操作符定义(例如filter
,take
,map
),另一个是在Observable.subscribe()上创建的。这是订阅者列表
操作员随附订户
实例。例如,map
操作符具有MapSubscriber
。在RxJS 7之前,运营商的订户就是这样被调用的,现在它使用了一种非常智能的方式来注入用户
如何用纯js在引擎盖下完成
如前所述,每个订户都有next()
,error()
,complete()
方法。例如,发生的情况如下:
错误(err?:any):无效{
如果(!this.isStopped){
this.isStopped=true;
这是一个错误(err);
}
}
isStopped
确保可以通过:
next(值?:T):无效{
如果(!this.isStopped){
这个._下一个(值!);
}
}
当然,这不是发生错误事件时发生的唯一事情,RxJS还负责拆卸逻辑,释放资源。RxJS的工作方式非常有趣。我在这里分享了我的观点。我试图讲述可观察的.pipe
,可观察的.subscribe
以及主题.observators
如何在引擎盖下工作
但要点是这样的(同样,这是我花了一些时间阅读源代码后的观点):
RxJS通过链接列表实现其功能
基本上,有两个链表。一个是在Observable.pipe()
的帮助下创建的,其节点由操作符定义(例如filter
,take
,map
),另一个是在Observable.subscribe()上创建的。这是订阅者列表
操作员随附订户
实例。例如,map
操作符具有MapSubscriber
。在RxJS 7之前,运营商的订户就是这样被调用的,现在它使用了一种非常智能的方式来注入用户
如何用纯js在引擎盖下完成
如前所述,每个订户都有next()
,error()
,complete()
方法。例如,发生的情况如下:
错误(err?:any):无效{
如果(!this.isStopped){
this.isStopped=true;
这是一个错误(err);
}
}
isStopped
确保可以通过:
next(值?:T):无效{
如果(!this.isStopped){
这个._下一个(值!);
}
}
当然,当错误事件发生时,这不是唯一发生的事情,RxJS还负责拆卸逻辑,释放资源。当一个可观察到的错误发生或完成时,它会死亡,因此它不会发出任何其他信息。你希望实现什么?是的。我用纯js重写了一个observable,所以我的意思是实现一些东西使它消亡(正如你所说的)。我试图在执行error/complete方法时提前返回,但正如Andrei的回答,阻止下一个方法是rxjs所做的。当一个可观察到的错误出现或完成时,它会死亡,因此它不会发出任何其他信息。你希望实现什么?是的。我用纯js重写了一个observable,所以我的意思是实现一些东西使它消亡(正如你所说的)。我试图在执行error/complete方法时提前返回,但正如Andrei的回答,阻止下一个方法是rxjs所做的。非常感谢。我试图在执行error/complete方法时提前返回,但没有想到只通过一个isStopped标志来阻止下一个方法。是的。非常感谢。我试图在执行error/complete方法时提前返回,但没有考虑只通过一个ISSTlock标志来阻止下一个方法。