Проект 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'));
Надеюсь это поможет!