10

2.5.2 rxjs バージョンを参照しているこのチュートリアルhttps://egghead.io/lessons/rxjs-creating-an-observableを使用しています。

npm パッケージrx.umd.jsから最新のものを参照してい ます。実行しようとしているコードは次のとおりです。rxjs@5.0.0-beta.6"<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=カタログ

rxjs 5 API は rxjs 2.5 とは大きく異なり、observer.onNext(42);サポートsub.dispose()されなくなりましたか?

4

2 に答える 2

10

2018/12 更新:

RxJS v6.x では、より「機能的な」新しい API が導入されました。詳細については、5 から 6 への移行ガイドをご覧ください。元のサンプル コードは引き続き機能しますが、次のofように演算子をインポートする必要があります。

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

元の RxJS 5 の回答:

それは正しい。RxJS 5 は、パフォーマンスを改善し、ES7Observable仕様にも準拠するように書き直されました。Github のRxJS 4->5 移行ページを確認してください。

これが実際の例です:

// 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 自体は非常に簡単に移行できます。

于 2016-04-14T03:59:43.483 に答える