मैं एकाधिक स्थगित फ़ंक्शन कॉल को एक साथ श्रृंखलाबद्ध करने की कोशिश कर रहा हूं जैसे कि अगली कॉल पिछले deferred.resolve के परिणाम प्राप्त करती है। जब मैं इनमें से 2 से अधिक कॉलों को एक साथ जोड़ता हूं, तो डेटा वापस लौटा रहता है।AngularJS में q का उपयोग करके एकाधिक जंजीर स्थगित फ़ंक्शन डेटा लौटने से रोकते हैं
$scope.runAsync = function() {
var asyncFn1 = function(data){
var deferred = $q.defer();
$timeout(function(){
console.log("Async fn1 " + data);
$scope.outputLines.push("Async fn1 " + data);
deferred.resolve("Async fn1 " + data);
},1000);
return deferred.promise;
}
var asyncFn2 = function(data){
var deferred = $q.defer();
$timeout(function(){
console.log("Async fn2 " + data);
$scope.outputLines.push("Async fn2 " + data);
deferred.resolve("Async fn2 " + data);
},1000);
return deferred.promise;
}
asyncFn1(1)
.then(function(data){asyncFn2(data)})
.then(function(data){asyncFn2(data)})
.then(function(data){asyncFn2(data)});
}
जब मैं इस चलाने मैं मिल निम्नलिखित उत्पादन:
Async fn1 1
Async fn2 Async fn1 1
Async fn2 undefined
Async fn2 undefined
मैं कैसे उन्हें एक साथ श्रृंखला कर सकते हैं ताकि तीसरे कॉल हो जाता है
यहाँ एक कोणीय नियंत्रक के अंदर बुनियादी कोड है दूसरे कॉल और चौथे के नतीजे तीसरे से परिणाम प्राप्त करते हैं?
मैं एक jsFiddle बनाया है: http://jsfiddle.net/rhDyL/
वाह .. धन्यवाद। मैं इसे अब देखता हूं। मैं इस तथ्य से उलझन में हूं कि .then() विधि एक नया वादा देता है, लेकिन asyncFn के अंदर मैं स्थगित वस्तु से एक वादा वापस कर रहा हूं। ऐसा लगता है कि वादे की संख्या दोगुना है। – BoxerBucks
मैं उसी स्थिति में था जो बहुत पहले नहीं था। _Promise और deferred_ को सीखने के लिए कुछ सीखने की वक्र और अभ्यास की आवश्यकता होती है। फिर भी, मुझे लगता है कि यह इसके लायक है। यह एसिंक प्रोग्रामिंग की दुनिया में कोड निष्पादन को और अधिक आसान बनाता है। यदि आप अभी भी इस विषय से परिचित नहीं हैं, तो मैं अत्यधिक अनुशंसा करता हूं [यह पढ़ना] (http://www.slideshare.net/domenicdenicola/promises-promises)। – tamakisquare
@tamakisquare - प्रतिक्रिया और टिप्पणी के लिए धन्यवाद। मुझे लगता है कि भ्रम का मुख्य बिंदु [डोमेनिक की प्रेजेंटेशन] की स्लाइड # 7 में स्पष्ट किया गया है (http://www.slideshare.net/domenicdenicola/promises-promises) यह है कि यदि वापसी मूल्य एक वादा है तो वादा स्वीकार करता है वादे के राज्य को वापस कर दिया अन्यथा सफलता कॉलबैक तुरंत वापसी मूल्य के साथ बुलाया जाता है। शायद आप इसे भी प्रतिबिंबित करने के लिए अपने उत्तर को संशोधित कर सकते हैं - अधिक पूर्ण होने के लिए। धन्यवाद। – Amir