我正在使用RxJS 5并具有以下方法:
Queue.prototype.drain = function (obs, opts) {};
在方法中,我想检查用户是否Observable
为第一个参数传递了,或者他们是否省略了,Observable
而只是传递了一个选项对象。
所以基本上我需要做这样的事情:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
我假设RxJS为用户提供了这种检查,但是我找不到找到向您展示如何进行这种类型检查的文档。
有人知道吗?
自编写此答案以来,RxJS版本6已发布,并且在该版本中,isObservable
已将函数添加到公共API。可以这样导入:
import { isObservable } from "rxjs";
函数签名为:
export function isObservable<T>(obj: any): obj is Observable<T>
由于它是使用typeguard定义的,因此编译器可以为您提供如下帮助:
const result: any = ...;
if (isObservable(result))
{
result.pipe(...); // compiler now knows it's an observable.
}
在内部,RxJS在测试是否Observable
使用instanceof
:
if (result instanceof Observable) {
...
}
因此,您可以使用:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
instanceof
可用于确定对象是否是Observable
您恰巧使用的RxJS库中的对象。
要确定该对象是否是可观察的外部对象,可以寻找一个Symbol.observable
property。
如果属性存在并且是函数,则可以Observable
通过将调用对象的Symbol.observable
属性所返回的值传递给来从外部可观察对象获取RxJS Rx.Observable.from
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句