2017-04-20 11 views
2

角度サービスのメソッドの1つは、コンポーネントが購読されているObservableを返します。しかし、その方法でも返される約束があり、それが拒絶を返す場合にそれを捕まえることができるようにしたい。以下のコードの断片を探す:observableにラップされた約束エラーをキャッチする - 角度2

return this.http.get(url) 
      .map(res => res.json()) 
      .map((data: any) => { 
       try { 
        if (data === "14") { 
         this.nativeService.set(value) 
          .then(() => { 
           console.log('ok'); 
          }) 
          .catch((err) => { throw new Error(); //error that I want to catch 
          }) 
        } 
       } 
       catch (err) { 
        throw new Error(); 
       } 
       return data; 
      }) 
      .catch((err) => this.handleError(err)); 

このnativeServiceは、現在のデータが返されるものの、次の

set(value: any): Promise<any> { 
    return new Promise((resolve, reject) => { 
     reject(''); 
    }) 
} 

を返す嘲笑されます。次に、エラーがスローされ、handleError()メソッドを呼び出すためにそれを捕まえることができません。私は約束が非同期呼び出しであることを理解しています。誰かがサービスによって返されたエラーをキャッチするためにコードをどのように並べ替えるべきかアドバイスできますか?あなたが観測からデータを返す方法を

おかげで、 アシュリー

+0

は 'set(value)'か 'set(data)'ですか? –

+0

@surajはい設定データ。 – ashley

答えて

1

はこれではありません。ここでは単純なreturn dataの文を使用することはできません。また、あなたはすでに観測値を返していますので、このデータはどこに行くのでしょうか?

返されるデータについては、実際には新しい観測値を作成し、受信したデータにオブザーバーを配置します。

は私はあなたのコードを修正してみましょう:

return Observable.create((observer) => { 
this.http.get(url) 
.map(res => res.json()) 
.subscribe((data) => { 
    if (data === "14") { 
    this.nativeService.set(data) 
    .then(() => { 
     console.log('ok'); 
     observer.next(data); 
    }) 
    .catch((err) => { 
     observer.next(err); // Error thrown if some problem in promise. 
    }) 
    } 
    },(err) => { 
    observer.error(err); //Error thrown if problem in http.get(). 
    }); 

今から加入したコンポーネントは、3つの出力を持つことになります。 1.データ2.約束エラー(.subscribeのデータで1と2の両方)と3. http.get()エラー。したがって、あなたはそこで管理しなければなりません。

注:私は問題の問題のみを解決しました。あなたは14番ではなく、文字列「14」とそれを比較したいようにそれはそうここに -

  1. if(data === "14") - 私は次のように私にはわからない部分については確認していません。
  2. http.get()の結果は何ですか?単一の数値を返した場合は問題ありません。
  3. this.nativeService.set(data) - この約束がすべて正しく返ってくると仮定します。
+0

ありがとうございます。私はそれを試してみましょう。 – ashley

+0

ありがとうございます、あなたのコードは、私の特定の問題を解決するための出発点を与えました:-) – jrierab

関連する問題