Angular 2 订阅了订阅了另一个异步函数的服务

Angular 2 subscribing to a service which is subscribed to another async function

我正在尝试开发一个 Angular 应用程序,在这种情况下我正在调用订阅了 HTTP 服务的服务。我已经编写了一个警报提示服务,它在按下 "ok" 时在内部调用 HTTP 服务。像这样:

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");
 });

但是我不明白如何订阅警报功能。我该怎么做?

在父级中使用 do in child service and 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");
  });
}

可能是这样的:

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;
     }
}

现在您可以订阅 prompt()-函数:

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

我不是 rxjs 专家,也许有更好的方法。