2015-05-31 2 views
3

Есть ли способ определить, является ли объект экземпляром класса-потока? Например, поток RxJS или Bacon.js.Каков наилучший способ определить, является ли объект экземпляром класса 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

Когда вы создаете пользовательский интерфейс, который является реактивным, он может получать значения в разных форматах, например, реактивный пользовательский интерфейс, который может получать текст , объект или поток, как это http://jsfiddle.net/8j6edrp9/ –

+1

Просто пусть он всегда берет поток. Даже если это постоянный поток. Также вы в любом случае не хотите произвольных объектов. Попробуйте различать потоковые объекты, массивы других элементов и примитивные строки (текст). – Bergi

ответ

2

Observable - базовый класс, который как наследует объекты EventStream, так и Property. Поэтому, если вы хотите обнаружить что-нибудь бекон, вы можете использовать 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 все еще отсутствует - потому что я спросил, что тоже не может принять его в качестве правильного ответа. Другое дело, что тест работает только в том случае, если Bacon определен в среде, но это небольшая деталь –

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) –

 Смежные вопросы

  • Нет связанных вопросов^_^