如何在Angular2中处理对离线源的获取请求?

时间:2016-11-18 09:01:23

标签: rest angular http-get

我有以下问题:我有一个Angular 2应用程序,它发送一个这样的get请求:

getStatus(cb:(boolean, error) => void){
    this.http.get(this.uri+'/forms/status')
    .subscribe(
        (res: Response) =>{
            console.dir(res);
            this.response = res;
            if(res.status === 200)cb(true, null);
            else cb(false, "No connection established");
        }
    )
}

因此,如果我的服务是否在线,此方法应该检查并且如果它处于脱机状态,则应该向用户发送消息。我的问题是我总是会得到

无法加载资源:net :: ERR_CONNECTION_RESET 当我打电话给方法时。 我的问题是我如何处理它,当我的服务离线时,该方法只返回布尔值为false。

最好的问候。

切换到

getStatus(cb:(boolean, error) => void){
this.http.get(this.uri+'/forms/status')
.map(val => true)
.catch(err => Observable.of([false])
.subscribe(
    (res: boolean) => cb(res, res ? null : "No connection established");)
}

返回错误消息:

ERROR in [default] C:\Development\Code\formcreator-ui\app\src\service\form.servi
ce.ts:66:8
Argument of type '(res: boolean) => void' is not assignable to parameter of type
 'NextObserver<boolean[]> | ErrorObserver<boolean[]> | CompletionObserver<boolea
n[]> | ((value: boo...'.
  Type '(res: boolean) => void' is not assignable to type '(value: boolean[]) =>
 void'.
    Types of parameters 'res' and 'value' are incompatible.
      Type 'boolean[]' is not assignable to type 'boolean'.

1 个答案:

答案 0 :(得分:0)

如果您想在浏览器控制台中取消错误消息,那么您就不走运了。此错误由浏览器创建,无法避免。

否则这应该做你想要的。

getStatus(cb:(boolean, error) => void){
    this.http.get(this.uri+'/forms/status')
    .map(val => true)
    .catch(err => Observable.of([false])
    .subscribe(
        (res: Response) => cb(res, res ? null : "No connection established");
    )
}

但不是cb我会像

那样做
getStatus(){
    return this.http.get(this.uri+'/forms/status')
    .map(val => true);
    .catch(err => Observable.of([false])
}

然后可以像

一样使用
this.getStatus().subscribe(avail => avail ? doSomething() : console.log("No connection"));

Observable是为了避免回调地狱,因此首选使用此功能而不是传递回调。