18 javascript rxjs rxjs5
我有这个方法:
Queue.prototype.drain = function (obs, opts) {};
Run Code Online (Sandbox Code Playgroud)
在方法中,我想检查用户是否传入了第一个参数的observable,或者是否省略了observable并且只是传入了一个options对象.
所以基本上我需要做这样的事情:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
Run Code Online (Sandbox Code Playgroud)
我假设RxJS为用户提供了这种检查,但我找不到向您展示如何进行此类型检查的文档.
谁知道怎么样?
car*_*ant 31
自写这个答案以来,RxJS版本6已经发布,在该版本中,一个isObservable函数被添加到公共API中.它可以像这样导入:
import { isObservable } from "rxjs";
Run Code Online (Sandbox Code Playgroud)
功能签名是:
export function isObservable<T>(obj: any): obj is Observable<T>
Run Code Online (Sandbox Code Playgroud)
由于它是使用typeguard定义的,编译器可以像这样帮助你:
const result: any = ...;
if (isObservable(result))
{
result.pipe(...); // compiler now knows it's an observable.
}
Run Code Online (Sandbox Code Playgroud)
在内部,RxJS测试Observable 使用instanceof:
if (result instanceof Observable) {
...
}
Run Code Online (Sandbox Code Playgroud)
所以你可以使用:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
Run Code Online (Sandbox Code Playgroud)
instanceof可用于确定对象是否是Observable您正在使用的RxJS库中的对象.
要确定对象是否为外部可观察对象,您可以查找Symbol.observable属性.
如果属性存在且是函数,则可以Observable通过将调用对象Symbol.observable属性返回的值传递给外部可观察对象来获取RxJS Rx.Observable.from.
| 归档时间: |
|
| 查看次数: |
10490 次 |
| 最近记录: |