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

Met*_*ian 10 http-post observable angular2-services angular

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

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

public setItem(item: IRequestItem) {
        this.http.post('api/items', item);
    }
Run Code Online (Sandbox Code Playgroud)

并在我的组件中调用它:

save() {
        var comp = this;
        this.items.forEach(function(item) {
            comp.service.setItem(item)
        });
    }
Run Code Online (Sandbox Code Playgroud)

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

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

然后在conponent中像这样调用它:

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

哪个会返回很多这些:

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
Run Code Online (Sandbox Code Playgroud)

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

Alu*_*dad 5

为了触发的要求,你需要调用subscribe但你并不需要从服务返回请求观察到的,从组件调用它,你甚至可以从服务中订阅。

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

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