使用Angular 2 http.post而不订阅?或者我在想错了?

时间:2016-07-29 16:22:50

标签: angular http-post observable angular2-services

有没有办法告诉服务器更新数据而不订阅?跳过return语句和订阅似乎使http调用变为惰性。

在我的情况下,我的数据库人创建了一堆没有返回任何内容的存储过程,有时我想在我的服务中做这样简单的事情:

public setItem(item: IRequestItem) {
        this.http.post('api/items', item);
    }

并在我的组件中调用它:

save() {
        var comp = this;
        this.items.forEach(function(item) {
            comp.service.setItem(item)
        });
    }

相反,我必须在服务中做这样的事情:

public setItem(item: IRequestItem) {
        return this.http.post('api/items', item);
    }

然后在conponent中这样称呼它:

save() {
        var comp = this;
        this.items.forEach(function(item) {
            comp.service.setItem(item).subscribe(r => console.log(r));
        });
    }

哪些会返回很多这些:

Response {_body: "", status: 204, ok: true, statusText: "No Content", headers: Headers…}
_body : ""
headers : Headers
ok : true
status : 204
statusText : "No Content"
type : 2
url : "http://localhost:56018/api/items"
__proto__ : Object

我只是在学习,所以也许我看错了。我可以解释那个Response对象中的某些内容,它会让我知道操作是否失败或成功?或者是否有另一种语法只会返回成功或失败,而不是令人困惑的“无内容”响应?

1 个答案:

答案 0 :(得分:4)

为了触发请求,您需要调用subscribe,但不需要从服务返回请求observable并从组件中调用它,您可以从服务中调用subscribe。

setItem(item: RequestItem) {
  this.http.post('api/items', item)
    .subscribe({ error: e => console.error(e) });
}

现在在上面,服务将立即返回,请求完成之前,但是将发出请求并从服务中记录任何错误。