0

私は、HTTPサービスを購読しているサービスを呼び出す状況がある角度アプリケーションを開発しようとしています。私は、「ok」が押されたときにHTTPサービスを内部的に呼び出すアラートプロンプトサービスを作成しました。このように:別の非同期関数を購読しているサービスに登録している角2

this.alertservice.prompt(url); 

これはユーザーに確認を求めるメッセージです。ユーザーが「OK」をクリックすると、アラートサービスは、内部HTTPサービスを呼び出します。

this.httpservice.get(url).subscribe(res => { 
    console.log(res); 
}); 

を今私は呼び出しが失敗したか成功したかどうか、親の発信者に知らせたいです。何かのように:

this.alertservice.prompt(url).subscribe(res => { 
    console.log("success or failure"); 
}); 

しかし、私はアラート機能を購読する方法を理解していません。これはどうすればいいですか?

答えて

0

多分何か:

import {..., EventEmitter} from '@angular/core'; 

export class AlertService { 

    ... 

    prompt(url:string): Observable<boolean> { 

     let result = new EventEmitter<boolean(); 

     this.httpService.get(url).subscribe 
      (
      (res) => { 
       console.log("OK:", res); 
       result.emit(true); 
       result.complete(); 
      }, 
      (error) => { 
       console.log("ERROR:", error); 
       result.emit(false); 
       result.complete(); 
      } 
     ); 
     return result; 
    } 
} 

は、今あなたがプロンプト()に加入することができます - 機能:

this.alertService.promp(url).subscribe((okOrNotOk) => { 
    // okOrNotOk will be true, when the url was retrieved successfully, 
    // otherwise false 
}); 

私は多分あり、rxjsの専門家ではありませんよこれを行うより良い方法。

+0

期待どおりに働いています:)ありがとう –

+0

これを探している人が恩恵を受けるように、より良い回答を見つけたら、回答を更新してください。 –

+0

rxjsではありません。 boolコールバック引数の代わりに、エラー通知メソッド(buildの2番目のコールバックなど)でbuildを使用する必要があります。 –

1

子サービスではdo、親ではエラー処理ではcatchを使用してください。

child() { 
    return this.httpservice.get(url).do(res=> 
    {console.log(res)} 
).catch(e => { 
    console.log("handle error"); 
    }); 
} 

parent() { 
    this.child(url).subscribe(res=>{ 
    console.log("success"); 
    }, e => { 
    console.log("or failure"); 
    }); 
} 
+0

実際には親コンポーネントのエラーをsweetalertコールバックとして扱うことができ、ほとんどのコードはこのサービスに基づいて作成されています。アラートコンポーネントでエラー処理を行い、parent.Isに文字列またはbool値を送信する必要があります。それは可能ですか? –

+0

@vikk私の更新を参照してください.. –

関連する問題