2017-10-20 4 views
0

ok、だから今は本当に困惑しています。rxjsが観測可能なタイムアウトのエラーを常に作成しました

const created = Rx.Observable.create(observer => { 
    observer.next(42) 
}) 
const ofd = Rx.Observable.of(42) 

const createSub = name => [ 
    val => console.log(`${name} received ${val}`), 
    error => console.log(`${name} threw ${error.constructor.name}`) 
] 

created 
    .timeout(100) 
    .subscribe(
    ...createSub('created') 
) 

ofd 
    .timeout(100) 
    .subscribe(
    ...createSub('ofd') 
) 

プリント

"created received 42" 
"ofd received 42" 
"created threw TimeoutError" 

次のコードを実行すると、私はなぜcreated観測誤差が、それは価値を発するが、ofd観察可能でないにもかかわらずない、全くこのことを理解していません?

RxJS 5を使用すると、jsbin.com 5.0.3と私のアプリケーション5.4.3で問題が発生します。

(注:これはあまりにも対象で発生し、この例を作成するために私を導いた)

+0

jsbinコードを共有できますか? – Maxime

+0

http://jsbin.com/fihotoduqo/1/edit?js,console –

答えて

1

Observable.of値が放出された直後のストリームを完了しています。

Observable.createは、観測可能な状態を維持します。それで、timeoutがエラーを投げているのです。

const created = Rx.Observable.create(observer => { 
    observer.next(42); 
    observer.complete(); 
}) 

では

const created = Rx.Observable.create(observer => { 
    observer.next(42) 
}) 

を交換し、エラーはもうありません。

+0

実際には意味がありますが、これは同じコードです...しかし、タイムアウトのドキュメントは何ですか: http:///reactivex.io/documentation/operators/timeout.html 値が送出されるとエラーはスローされませんか、それとも間違っていますか? –

+0

"Timeout演算子を使用すると、Observableが指定された時間内にアイテムを放出できない場合、onError終了でObservableを中止することができます。値を送出するとタイムアウトになります。私はそれが正常な動作だと思います – Maxime

+0

は、2回読む必要があったので、最初の値の後にタイムアウトが発生したためエラーとなりました... hmmm、私は行く方法がobservableが完了することを確認することです。 「最初に発信するタイムアウト」はありませんか? –

関連する問題