Проект JSBIN с RX.Js 5.0.0 Ошибка "Не определено"

Когда я запускаю новый проект JSBIN со следующими спецификациями:

- Использование вкладок: JavaScript, консоль

- Добавление библиотеки: RxJS 5.0.0

А затем запустите следующий блок кода в области JavaScript:

var observable = Rx.Observable.create(observer => {
  setInterval(() => {
    observer.onNext('This is the output of my async operation');
  }, 2000);
});

observable.subscribe(response => console.log(response));

Предыдущий код должен отобразить следующий вывод в области консоли:

"This is the output of my async operation"

Через две секунды область консоли должна получить рендер:

"This is the output of my async operation"

Однако я получаю следующую ошибку:

"error"
-----------------------------
"ReferenceError: Rx is not defined
    at yivicazake.js:3:4
    at https://static.jsbin.com/js/prod/runner-3.39.12.min.js:1:13926
    at https://static.jsbin.com/js/prod/runner-3.39.12.min.js:1:10855

Это мой первый случай использования RxJS в качестве библиотеки с использованием JSBIN, и я надеюсь, что кто-то имел опыт работы с этой конкретной ошибкой.

2 ответа

Решение

Я не уверен, какую именно версию бета-версии Rxjs вы используете, я создал jsbin, и он отлично работает для меня. http://jsbin.com/henimevepa/edit?html,js,console,output

Здесь мало вещей

- instead of '.onNext' in version 5 its just '.next'
- You need to subscribe to observer to run it.

Я также изучаю RxJS, и здесь есть несколько вещей, на которые стоит обратить внимание. Сейчас все еще очень легко путать документацию по RxJS v4 и v5, поэтому несколько ссылок помогут:

Репозиторий v5 - это https://github.com/ReactiveX/RxJS. /Reactive-Extensions/RxJS для v4. И то, и другое по-прежнему полезно, поэтому, если вы читаете онлайн-курсы с версией 4 (их много), документы по миграции помогут!

Это руководство очень полезно и RxMarbles тоже.

Что касается вашего кода, попробуйте это:

// create subscriber
const createSubscriber = tag => ({
    next(item) { console.log(`${tag}.next ${item}`); },
    error(error) { console.log(`${tag}.error ${error.stack || error}`); },
    complete() { console.log(`${tag}.complete`); }
});

// interval
Rx.Observable
    .interval(2000)
    .take(5)
    .subscribe(createSubscriber('This is the output of my async operation'));

Надеюсь это поможет!

Другие вопросы по тегам