2016-07-29 10 views
7

क्या सर्वर को सब्सक्राइब किए बिना डेटा अपडेट करने का कोई तरीका है? एक वापसी कथन छोड़ना और एक सदस्यता http कॉल निष्क्रिय प्रस्तुत करना प्रतीत होता है।सब्सक्राइब किए बिना एक कोणीय 2 http.post का उपयोग करना? या क्या मैं गलत सोच रहा हूँ?

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 

मैं सिर्फ इतना शायद सीख रहा हूँ मैं गलत इसे देख रहा हूँ। क्या मैं उस प्रतिक्रिया वस्तु में कुछ समझ सकता हूं जो ऑपरेशन विफल या सफल होने पर मुझे बताएगा? या क्या कोई और वाक्यविन्यास है जो भ्रमित "कोई सामग्री" प्रतिक्रिया के बजाय सफलता या विफलता वापस कर देगा?

+0

[कोणीय http.post बिना। सदस्यता के कॉलबैक के संभावित डुप्लिकेट] (http://stackoverflow.com/questions/41296052/angular-http-post-without- सदस्यता लें- कॉलबैक) – lex82

उत्तर

3

अनुरोध को ट्रिगर करने के लिए, आपको subscribe पर कॉल करने की आवश्यकता है, लेकिन आपको सेवा से देखने योग्य अनुरोध वापस करने की आवश्यकता नहीं है और इसे घटक से कॉल करने की आवश्यकता नहीं है, आप सेवा के भीतर से सब्सक्राइब कर सकते हैं।

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

अब ऊपर में, सेवा तुरंत वापस आ जाएगी, से पहले अनुरोध के पूरे होने लेकिन अनुरोध किया जाएगा और सेवा के भीतर से लॉग ऑन किसी भी त्रुटि।

-1

map विधि का प्रयास करें:

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

स्पष्टीकरण: subscribesetItem में या save समारोह में बुलाया जाना चाहिए। अन्यथा AJAX अनुरोध नहीं किया जाएगा।

+0

समझ में आता है - मैं इसका उपयोग करता हूं मेरी http.get विधियों - लेकिन जब मैंने इसे आजमाया तो मुझे "एक्सेप्शन: सिंटेक्स त्रुटि: जेएसओएन इनपुट का अप्रत्याशित अंत" मिला, केवल एक ही डेटा के अलावा, जो मुझे वापस पाने में बेहद दिलचस्पी है, यह होगा कि विधि सफलतापूर्वक निष्पादित की गई है या नहीं ... – Methodician

+3

नक्शा अनुरोध भेजने का कारण नहीं बनता है, यह केवल एक और देखने योग्य है जो पहले प्रक्षेपण को परिभाषित करता है। सदस्यता लें अभी भी आवश्यक है। –

संबंधित मुद्दे