2015-05-31 26 views
3

有没有办法检测对象是否是流类的实例?例如RxJS或Bacon.js流。什么是检测Object是否是Stream类实例的最佳方法?

我正在寻找的是类似

function isStream(obj) { 
    // if obj is RxJS or Bacon Stream return true, otherwise false 
} 

什么是这样做的最可靠的方法是什么?

+0

你需要什么?这似乎更多是[XY问题](http://meta.stackexchange.com/q/66377) – Bergi

+0

当您创建反应它的UI时,它可以获取不同格式的值,例如可以获取文本的反应性UI ,像这样的对象或流http://jsfiddle.net/8j6edrp9/ –

+1

只要让它总是采取流。即使它是一个不断的流。无论如何,你大多不想要任意对象。尝试区分流对象,其他项目的数组和基元字符串(文本)。 – Bergi

回答

2

Observable是对象继承自EventStreamProperty的基类。所以如果你想检测任何培根,你可以使用Observable

function isStream(v) { 
    return v instanceof Bacon.Observable 
} 

function test(v) { 
    console.log(isStream(v)) 
} 

test(Bacon.constant(1)) // true 
test(Bacon.once(1))  // true 
test(1)     // false 

http://jsbin.com/qugihobalu/2/edit

+0

我复制了我的评论作为答案。 – OlliM

+0

良好的答案,RxJS检测仍然失踪 - 因为我问了也不能接受它作为正确的答案。另一件事是,测试只适用于如果在环境中定义培根,但这是一个小的细节 –

2

有可能在每个框架更好的方法,例如一个本地isStream等价物,但检查instanceof是下一个最佳解决方案,适用于培根和rxjs。

const isStream = x => x instanceof Bacon.Observable || x instanceof Rx.Observable; 
+0

看到与[redux-rx](https://github.com/acdlite/redux-rx/blob/master /src/isObservable.js) –

相关问题