मैं एक $ http कॉल पर काम कर रहा हूं जो एकाधिक एपीआई में से प्रत्येक पर लूप करता है और एक ही ऑब्जेक्ट में सभी डेटा देता है। जब आमतौर पर $ http कॉल किया जाता है तो हल करने के लिए मेरे पास वादा तैयार होता है। इस के समान:
function getAllData(api) {
return $http({
method: 'GET',
url: '/api/' + api
})
.then(sendResponseData)
.catch (sendGetVolunteerError);
}
वर्तमान समारोह मैं एक एपीआई से अधिक छोरों है और एक सरणी में एपीआई में प्रत्येक वस्तु धक्का और फिर एक समग्र सरणी में यह धक्का। मेरे पास यह कामकाज था, एक बहु-आयामी सरणी लौट रहा था, जिसे बाहर निकालना आवश्यक था।
मैं इसे एक वादे में वापस करना चाहता हूं, लेकिन undefined
लौटा रहा हूं। यह है, जो कि अभी तक मेरे पास है? क्या इस दृष्टिकोण के लिए कोई बेहतर तरीका है?
dataService:
function getSearchData() {
return {
loadDataFromUrls: function() {
var apiList = ["abo", "ser", "vol", "con", "giv", "blo", "par"];
var deferred = $q.defer();
var log = [];
angular.forEach(apiList, function (item, key) {
var logNew = [];
$http({
method: 'GET',
url: '/api/' + item
}).then(function (response) {
angular.forEach(response.data, function (item, key) {
this.push(item);
}, logNew);
return logNew;
});
this.push(logNew);
}, log);
$q.all(log).then(
function (results) {
deferred.resolve(
JSON.stringify(results))
},
function (errors) {
deferred.reject(errors);
},
function (updates) {
deferred.update(updates);
});
return deferred.promise;
}
};
};
नियंत्रक:
function getSearchData(){
return dataService.getSearchData.loadDataFromUrls;
}
$scope.searchData = getSearchData();
मुझे यकीन है कि यहाँ क्या हो रहा है 100% नहीं कर रहा हूँ - आप कर रहे हैं रिक्त सरणी ('logNew') को 'लॉग' सरणी में नहीं दबाया जा रहा है, जिसे आप प्रतीक्षा करना चाहते हैं? क्या आपको इसके बजाय '$ http' द्वारा वापस 'वादा' को धक्का नहीं देना चाहिए? –