Javascript 检查对象是否为可观察对象
我使用的是RxJS 5,有以下方法:Javascript 检查对象是否为可观察对象,javascript,rxjs,rxjs5,Javascript,Rxjs,Rxjs5,我使用的是RxJS 5,有以下方法: Queue.prototype.drain = function (obs, opts) {}; 在这个方法中,我想检查用户是否为第一个参数传入了一个可观察的,或者他们是否省略了可观察的,只是传入了一个options对象 所以基本上我需要这样做: if(!Rx.Observable.isObservable(obs)){ //this method is fictitious opts = obs || {}; obs = Rx.Obse
Queue.prototype.drain = function (obs, opts) {};
在这个方法中,我想检查用户是否为第一个参数传入了一个可观察的
,或者他们是否省略了可观察的
,只是传入了一个options对象
所以基本上我需要这样做:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
我假设RxJS为用户提供了这种检查,但是我找不到说明如何进行这种类型检查的文档
有人知道怎么做吗?写下这个答案后,RxJS版本6已经发布,在该版本中,一个函数被添加到公共API中。它可以按如下方式导入:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
从“rxjs”导入{isObservable};
函数签名为:
导出功能isObservable(obj:any):obj是可观察的
因为它是用typeguard定义的,所以编译器可以像这样帮助您:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
const result:any=。。。;
if(可服务(结果))
{
result.pipe(…);//编译器现在知道它是可观察的。
}
在内部,RxJS测试一个
可观察的:
if(可观察的结果实例){
...
}
因此,您可以使用:
if(!(obs接收实例可观察)){
opts=obs |{};
obs=接收可观测间隔(1000);
}
instanceof
可用于确定对象是否是您正在使用的RxJS库中的可观察对象
要确定该对象是否为外来可观察对象,您可以
如果属性存在并且是函数,通过将调用对象的符号.Observable
属性返回的值传递给Rx.Observable,您可以从外部Observable中获得RxJSObservable
。从中,检查对象中的键属性似乎仍然是检查其是否可观察的一种方法
这是
尽管如此,目前rxjs官方项目中确实存在一些问题。它似乎仍然在内部使用,因为我目前看不到直接将此函数导出到主索引中。if(isObservable(obj)){console.log(“observable”)}我听说在比较跨iFrame运行的代码时,instanceof
操作符可能会中断,如果构造函数ref不完全相同,则有意义。我假设isObservable的实现可以处理这个问题。!!obj&&
可能不是必需的,可以只做obj&&
唯一的此页面上的代码>位于您的注释中。