检查对象是否为可观察对象

user5047085:

我正在使用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.observableproperty

如果属性存在并且是函数,则可以Observable通过将调用对象的Symbol.observable属性所返回的值传递给从外部可观察对象获取RxJS Rx.Observable.from

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章