通用构建请求方法响应未定义

时间:2016-09-27 10:31:23

标签: angular rxjs

我为所有api调用创建了一个通用的构建请求方法。响应没问题,但是没有通过此方法。

我的api.ts课程(片段)

buildRequest(url, method, body?) {
    let options = new RequestOptions({
        url: this.apiUrl + url,
        method: method,
        body: body
    });
    let req = new Request(options);
    return this.http.request(req)
        .map(res => {
            res.json();
        })
        .catch(this.handleError);
}

handleError(error: any) {
    return Observable.throw(error.message);
}

在同一个班级中我定义了所有的调用:

getItem() {
    return this.buildRequest('url', RequestMethod.Get)
}

然后从我做的组件

this.api.getItem().subscribe(res => {
    this.item = res;
    }
})

其他地方,但在.map内,res 未定义。当我经常使用

  

返回this.http.get(...)

和这里显示的逻辑相同,它工作正常。我做错了什么?

我正在导入这两个:

  

从' rxjs / Observable'中导入{Observable};

     

导入' rxjs / Rx'

1 个答案:

答案 0 :(得分:1)

在你的buildRequest方法中,你犯了一个小错误。当使用带花括号的lambda表达式时,你必须返回一些内容:

x => x.Field // <-- this is a shorthand

等于

x => { return x.Field; }

因此.map调用中的代码应如下所示:

return this.http.request(req)
    .map(res => {
        return res.json();
    })
    .catch(this.handleError);