2016-07-29 11 views
7

Sunucuyu abone olmadan verileri güncellemesini söylemenin bir yolu var mı? Bir dönüş ifadesinin ve aboneliğin atlanması, http çağrısının atıl görünmesini sağlar.Abone olmadan bir Angular 2 http.post kullanarak? Yoksa yanlış mı düşünüyorsun?

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

ve benim bileşeninde böyle diyoruz: Benim durumumda

, benim DB adam hiçbir şey dönmek ve bazen benim hizmetinde böyle basit bir şey yapmak istiyorum saklı prosedürlerin vazo üreterek :

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

Onun yerine hizmetinde böyle bir şey yapmak zorunda:

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

Sonra conponent böyle diyoruz:

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

bu çok dönecekti Hangi: Sadece bu yüzden belki öğreniyorum

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 

yanlış bakıyorum. İşlem nesnesinin başarısız olup olmadığını bildirecek olan bu Response nesnesindeki bir şeyi yorumlayabilir miyim? Ya da kafa karıştırıcı "İçerik Yok" yanıtı yerine bir başarı veya başarısızlık döndürecek başka bir sözdizimi var mı?

+0

Olası yinelenen (http://stackoverflow.com/questions/41296052/angular-http-post-without-subscribe-callback) – lex82

cevap

3

İsteği tetiklemek için, subscribe numaralı telefonu aramanız gerekir, ancak servisten gözlemlenebilen isteği geri göndermeniz gerekmez ve bunu bileşenden çağırmanız gerekmez, servisin içinden aboneliği arayabilirsiniz. istek tamamlanana ancak istek yapılacaktır ve hizmet içinden açmış herhangi bir hata önce

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

Şimdi yukarıda, hizmet derhal dönecektir. [.subscribe callback'inde olmadan Açısal http.post] arasında

-1

map yöntemi deneyin:

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

Açıklama: subscribesetItem veya save işlevinde çağrılmalıdır. Aksi takdirde ajax isteği yapılmayacaktır.

+0

mantıklı - Bütün o kullanmak http.get yöntemlerim - ama denediğimde "EXCEPTION: SyntaxError: JSON girişinin beklenmedik sonu" nı aldığımda geri dönme ile ilgilenen tek verinin yanı sıra, metodun başarılı bir şekilde uygulanıp uygulanmadığı ... – Methodician

+3

Harita, istek gönderilmesine neden olmayacak, sadece bir projeksiyonu ilk olarak tanımlayan başka bir gözlemlenebilir döndürür. Abone hala gereklidir. –