पर असफल असफलता मैं रिमोट कॉल्स की एक श्रृंखला को हल करने के लिए कुछ स्थानीय डेटा भरने की कोशिश कर रहा हूं।
जब हर वादा हल हो जाता है, तो मैं डेटा लोड करता हूं और आगे बढ़ता हूं।
विधि $q.all([])
वास्तव में यह करता है:
$q.all([
this.getUserInfo(11)
.then(function (r) {
results.push(r)
}),
this.getUserConns()
.then(function (r) {
results.push(r)
}),
this.getUserCtxs()
.then(function (r) {
results.push(r)
})
])
.then(function() {
console.log(results)
})
समस्या है, इस कोड को लचीला नहीं है।
यदि इनमें से कोई भी कॉल विफल रहता है, तो कोई भी मछली नहीं पाता है!
आज़माएं/कैच बयान में कॉल रैपिंग, बस $q.all()
का कारण बनता है पूरी तरह से प्रवेश की अनदेखी करने, यहां तक कि (समारोह में console.log ध्यान दें) जब नाकाम रहने नहीं ...
$q.all([
this.getUserInfo2(11)
.then(function (r) {
results.push(r)
}),
function() {
try {
this.getUserGroups()
.then(function (r) {
console.log(r)
results.push(r)
})
}
catch (err) {
console.log(err)
}
},
])
.then(function() {
console.log(results)
})
आउटपुट:
[वस्तु]
किसी भी संकेत पर कि मैं इसे लचीला होने के लिए कैसे लपेट सकता हूं?
@dtabuenc के लिए धन्यवाद, मैं एक कदम आगे चला गया हूं। त्रुटि कॉलबैक को कार्यान्वित करना, मैं श्रृंखला के तोड़ने से बच सकता हूं, और हल किए गए वादे के मूल्यों को धक्का दे सकता हूं।
हालांकि, कंसोल पर एक बुरा अपवाद अभी भी प्रदर्शित होता है ... अगर मैं एसिंक अनुरोधों को आजमा नहीं सकता तो मैं इससे कैसे छुटकारा पा सकता हूं?
कोलर कोड
return $q.all([
this.getUserInfo(user_id)
.then(function (r) {
results['personal_details'] = r
}),
this.getUserConns()
.then(
function (r) {
results['connections'] = r
},
function(err) {
console.log(err)
})
])
.then(function() {
return (results)
})
कॉल प्राप्त करने वाला कोड (एक अपवाद के साथ इंजेक्षन)
getUserConns: function() {
return __doCall(ws.getUserConnections, {})
.then(function(r) {
// very generic exception injected
throw new Error
if (r && r.data['return_code'] === 0) {
return r.data['entries']
}
else {
console.log('unable to retrieve the activity - err: '+r.data['return_code'])
return null
}
})
},
वास्तव में, मैं अभी भी कोणीय, वादे और यहां तक कि जेएस पर एक नौसिखिया हूं, और मैं हर दिन नई चीजें सीखने से खुश हूं! .catch() विधि अभी भी मेरे अंतिम उदाहरण पर अपवाद को "अवरुद्ध" नहीं करती है, लेकिन मुझे लगता है कि यह मेरे आदर्श परिणाम में सबसे नज़दीक है। धन्यवाद! – domokun
@domokun कोणीय वादे गलत तरीके से पकड़े गए अपवादों की रिपोर्ट करते हैं, वादे – Esailija
का उल्लंघन नहीं करते हुए वादा/ए + की भावना का उल्लंघन करते हैं ... मुझे लगता है ... Thx फिर से! – domokun