получение ошибок rxjs при ссылке на последние rxjs

Я использую этот учебник https://egghead.io/lessons/rxjs-creating-an-observable, который ссылается на версию 2.5.2 rxjs.

Я ссылаюсь на последний rx.umd.js из [email protected]" пакета npm <script src="node_modules/rxjs/bundles/rx.umd.js"></script> И вот код, который я пытаюсь запустить:

console.clear();

var source = Rx.Observable.create(function(observer){
    setTimeout(function() {
        console.log('timeout hit');
        observer.onNext(42);
        observer.onCompleted();
    }, 1000);

    console.log('started');
});

var sub = source.subscribe(function(x) {
    console.log('next ' + x);
}, function(err) {
    console.error(err);
}, function() {
    console.info('done');
});

setTimeout(function() {
    sub.dispose()
}, 500);

Вот вывод консоли, который я получаю.

Console was cleared
script.js:10 started
script.js:22 Uncaught TypeError: sub.dispose is not a function
script.js:5 timeout hit
script.js:6 Uncaught TypeError: observer.onNext is not a function

плункер: https://plnkr.co/edit/w1ZJL64b8rnA92PVuEDF?p=catalogue

API rxjs 5 сильно отличается от rxjs 2.5, а observer.onNext(42); и sub.dispose() больше не поддерживаются?


person sreginogemoh    schedule 14.04.2016    source источник


Ответы (2)


Обновление 2018/12:

RxJS v6.x представил новый, более «функциональный» API. Дополнительные сведения см. в 5>руководстве по миграции. Исходный код примера все еще работает, но вам придется импортировать оператор of следующим образом:

// ESM
import { of } from 'rxjs'
// CJS
const { of } = require('rxjs');

Оригинальный ответ RxJS 5:

Вот так. RxJS 5 был переписан для повышения производительности, а также для соответствия спецификации ES7 Observable. Ознакомьтесь с страница миграции RxJS 4->5 на Github.

Вот рабочий пример:

// Create new observable
const one = Observable.of(1,2,3);

// Subscribe to it
const oneSubscription = one.subscribe({
    next: x => console.log(x),
    error: e => console.error(e),
    complete: () => console.log('complete')
});

// "Dispose"/unsubscribe from it
oneSubscription.unsubscribe();

Многие методы были переименованы, но к самому API очень легко перейти.

person eldarshamukhamedov    schedule 14.04.2016
comment

Не уверен, что это может помочь кому-то, но у меня возникла аналогичная ошибка:

old.dispose is not a function

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

Поэтому я решил обновить все вызовы, чтобы использовать новейшие rxjs.

person Francesco Borzi    schedule 19.07.2019