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 专家,也许有更好的方法。
我正在尝试开发一个 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 专家,也许有更好的方法。