2016-07-29 14 views
7

Có cách nào chỉ cần yêu cầu máy chủ cập nhật dữ liệu mà không cần đăng ký? Bỏ qua câu lệnh trả về và đăng ký dường như hiển thị lệnh gọi trơ http.Sử dụng một http.post Angular 2 mà không cần đăng ký? Hay tôi đang nghĩ về nó sai?

Trong trường hợp của tôi, anh chàng DB của tôi đã tạo ra một loạt các thủ tục được lưu trữ mà trở về không có gì và đôi khi tôi muốn làm một cái gì đó đơn giản như thế này trong dịch vụ của tôi:

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

và gọi nó là như thế này trong thành phần của tôi :

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

Thay vào đó tôi phải làm một cái gì đó như thế này trong các dịch vụ:

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

Và sau đó gọi nó như thế này trong conponent:

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

nào sẽ trở lại rất nhiều trong số này:

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 

Tôi chỉ học tập như vậy có lẽ tôi đang nhìn vào nó sai. Tôi có thể diễn giải điều gì đó trong đối tượng Phản hồi đó sẽ cho tôi biết nếu hoạt động thất bại hoặc thành công không? Hoặc có một cú pháp khác sẽ chỉ trả lại thành công hay thất bại thay vì phản hồi "Không có nội dung" khó hiểu?

+0

Bản sao có thể có của [Angular http.post mà không cần .subscribe callback] (http://stackoverflow.com/questions/41296052/angular-http-post-without-subscribe-callback) – lex82

Trả lời

3

Để kích hoạt yêu cầu, bạn cần gọi subscribe nhưng bạn không cần phải trả lại yêu cầu quan sát được từ dịch vụ và gọi nó từ thành phần, bạn có thể gọi đăng ký từ bên trong dịch vụ.

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

Bây giờ ở trên, dịch vụ này sẽ ngay lập tức trở lại, trước yêu cầu hoàn thành nhưng yêu cầu sẽ được thực hiện và bất kỳ lỗi đăng nhập từ bên trong dịch vụ.

-1

Hãy thử map phương pháp:

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

Làm rõ: subscribe nên được gọi là trong setItem hoặc trong save chức năng. Nếu không, yêu cầu ajax sẽ không được thực hiện.

+0

Làm cho tinh thần - tôi sử dụng nó trên tất cả các phương thức http.get của tôi - nhưng khi tôi thử nó, tôi đã nhận được "EXCEPTION: SyntaxError: Đầu cuối JSON không mong đợi" bên cạnh dữ liệu duy nhất mà tôi mơ hồ nhận được trở lại là liệu phương thức có được thực hiện thành công hay không ... – Methodician

+3

Bản đồ sẽ không làm cho yêu cầu được gửi đi, nó chỉ đơn giản trả về một quan sát khác xác định phép chiếu trên đầu tiên. Đăng ký vẫn được yêu cầu. –

Các vấn đề liên quan