2016-07-15 10 views
2

void関数の戻り値の型がPromise(私はそれについて正しいことを望む)であることを関数に伝えることができるので、簡単にプロンプ​​トを出します。void関数をどのように購読すべきですか?

私はそれはのようなものになりますので、観測と同じことをやってみたい:最初の行がエラーをスローする場合、加入者が知ることができません

import {Observable, Subject} from "rxjs/Rx" 

... 
private personArray:Person[] = PERSONS; ///some persons in other file. 
... 

///This fucntion remove one person from my service. 

public remove(id:number):Observable<void> { 
    this.personArray = this.personArray.filter(person1=>person1.id !== id); 
    return Observable.from(); ??? 
    } 
  1. 。私はそれを行うためのより良い方法があると確信しており、私はこれのために他の扇動を見るのはすごくなるでしょう。
  2. このコードを動作させるにはどうすればよいですか?

ありがとうございます。

答えて

1

OnCompletedメッセージが必要な場合は、Observable.empty()を使用します。エラーが発生した場合、あなたはObservable.throw(...)を使用することができます。

public remove(id:number):Observable<void> { 
    try { 
    this.personArray = this.personArray.filter(person1=>person1.id !== id); 
    return Observable.empty(); 
    } catch (e) { 
    return Observable.throw(e); 
    } 
} 

また、あなたは.defer()を使用することができます。あなたの関数が例外をスローした場合、ONERRORは(自動的に)代わりにスローされます。

public remove(id:number):Observable<void> { 
    return Observable.defer(() => { 
    this.personArray = this.personArray.filter(person1=>person1.id !== id); 
    return Observable.empty(); 
    }); 
} 
+0

すばやくお返事ありがとうございます。これは削除を実装する最良の方法ですか?私が言及したように、購読者は、削除機能の最初の行がエラーを返すかどうかはわかりません。そして、オブザーバーは一般的なので、これを使用するにはどうすればよいですか? –

+0

私はあなたのポイントを見ます。ユーザにエラーを通知する方法を追加しました。見てみましょう。 – acdcjunior

+0

ありがとうございます。私は '.defer(関数)'の例を追加しました。それはあなたが望むものに近いですか? – acdcjunior

0

あなたは本当にvoidを使用することはできませんし、誰もが任意の値を解釈しようとしませんので、タイプは本当に重要ではありません、ので、ちょうどanyを使用してください:

public remove(id:number):Observable<any> { 
    this.personArray = this.personArray.filter(person1=>person1.id !== id); 
    return Observable.empty<any>(); 
} 
+0

Rxjsはスマートなソリューションを提供していませんか?他の開発者は私が何かを返すと思うことがあり、それは間違っています。あなたはそれをどのように実装しますか?マビはその約束をうまく使っている? –

+0

これはRxJsでは問題ありません。これはTypeScript言語の問題です。ジェネリック型の引数として 'void'を使う方法はありません。あなたは約束の同じ問題に遭遇するでしょう – Brandon

+0

応答のおかげで。 Typescriptでは、新しいPromise (()=> ....)を返すことができます。ですから、私たちが何かを返さないときに約束を使用するのが最善の方法です。私はあなたの意見を聞いて欲しい。 –

関連する問題