2014-10-04 34 views
12

की मैं इस तरह एक डेटा सेवा है: कुछ सामान प्रारंभ करने मेंकोणीय लेखन त्रुटि: 'फिर' संपत्ति पढ़ा नहीं जा सकता अपरिभाषित

this.myFunction= function(callback) { 
    var url = rootURL + "path1/path2/service.json"; 
    var promise = $http.get(url); 
    promise.then(function(payload){ 
     return callback(payload); 
    }); 
    return promise; 
} 

यह एक नियंत्रक में कहा जाता है:

DataService.myFunction(function(data) { 
    if(data.statusText !== "OK"){ 
     $scope.$worked= false; 
    }else{ 
     $scope.$worked= true;    
    } 
} 

और मैं मिल "टाइप एरर: संपत्ति को पढ़ नहीं सकता 'तो' अपरिभाषित '। कॉलबैक में Console.log (डेटा) 200 "ठीक" प्रतिक्रिया और डेटा की अपेक्षा करता है। मैंने पहले से ही इस त्रुटि की खोज की है और ज्यादातर यह सेवा में वादे वापस नहीं करने के कारण है। हालांकि, मैं वादा वापस कर रहा हूँ। कॉलबैक में नियंत्रक दायरे पर कुछ भी सेट करने से त्रुटि होती है।

कोणीय संस्करण: AngularJS v1.3.0-rc.2

धन्यवाद!

+1

आप पोस्ट कर सकते हैं कॉलबैक फ़ंक्शन का उपयोग करना चाहते हैं? इसके अलावा आपको एक चर के लिए कॉल प्राप्त करने की आवश्यकता नहीं है, यह पहले से ही एक वादा है और आप इसे केवल कॉल कर सकते हैं। –

+0

क्या आप एक प्लंकर या अधिक संदर्भ प्रदान कर सकते हैं? ऐसा प्रतीत होता है कि उस कोड को टाइपरर फेंकना नहीं चाहिए। कॉलबैक को संभालने के बेहतर तरीके के लिए – Jon7

उत्तर

22

आपको इस मामले में एक वादा वापस करने की आवश्यकता नहीं है, क्योंकि आप कॉलबैक का उपयोग कर रहे हैं। कॉलबैक और वादे स्पेक्ट्रम के दो सिरे हैं। आप जो कुछ भी चाहते हैं उसे पूरा कर सकते हैं।

यदि आप कॉलबैक का उपयोग करना चाहते हैं तो आप अपना कंट्रोलर कोड छोड़ सकते हैं।

this.myFunction= function(callback) { 
    var url = rootURL + "path1/path2/service.json"; 
    $http.get(url).then(function(response) { 
     callback(response.data); 
    }); 
} 

या आप वादों

this.myFunction= function() { 
    var url = rootURL + "path1/path2/service.json"; 
    return $http.get(url).then(function(response) { 
     return response.data; 
    }); 
} 

DataService.myFunction().then(function(data) { 
    if(data.statusText !== "OK"){ 
     $scope.$worked = false; 
    } else { 
     $scope.$worked = true;    
    } 
}); 
+2

+1। मुझे वास्तव में पता चला कि मेरे ऐप में दूसरे संस्करण (v1.2.20) से 'ngAnimate' शामिल था। अब मुझे इसकी आवश्यकता नहीं है इसलिए मैंने इसे बाहर निकाला और अचानक अचानक कोई और प्रकार की त्रुटि नहीं हुई। – DragonMoon

+0

मेरे पास '$ http' कॉल और' .then (फ़ंक्शन (res) {वापसी res;}) के साथ एक सेवा है; और इसे एक नियंत्रक से कॉल करें जहां मेरे पास 'serviceName.functionName() है। (फ़ंक्शन (res) {// res के साथ कुछ करें}) ', लेकिन मैं पहले से काम करने के बावजूद' संपत्ति को पढ़ नहीं सकता 'तब' अपरिभाषित 'प्राप्त कर रहा हूं ... कारण क्या हो सकता है? – user841760

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