وعد مع سمة البيانات لا تعمل
-
21-12-2019 - |
سؤال
لدي مصنع مع وعد من المفترض أن استطلاع البيانات من خدمة ويب في فترة من 5 ثوان.يتم جلب البيانات بواسطة وحدة تحكم وتحليلها.يبدأ المستطلع من التطبيق.اركض.
المشكلة هي أن البيانات تبدو غير قابلة للوصول من وحدة التحكم, لماذا هذا?
(فقط من خلال النظر في ذلك أبدأ في التساؤل عما إذا كان فار ليفيداتا هو ثريادزاف)
factory('liveDataPoller', ['$http', '$timeout', function($http, $timeout) {
var liveData = {
status: -1,
events: [],
checksum: 0,
serverTime: 0,
calls: 0
};
var poller = function() {
$http.get('/api/getInformation.json')
.then(function(res) {
status = res.statusCode;
if(status < 0) {
// TODO: handle service error
} else {
liveData.events = res.events;
liveData.checksum = res.checksum;
liveData.serverTime = res.serverTime;
}
liveData.status = status;
liveData.calls++;
$timeout(poller, 5000);
});
};
poller();
return {
getData: function() {
return liveData;
}
};
}])
المراقب المالي:
angular.module('myApp.controllers', [])
.controller('MainCtrl', ['$rootScope', '$scope', '$timeout', 'liveDataPoller', function($rootScope, $scope, $timeout, liveDataPoller) {
var transformLiveData = function(liveData) {
var liveDataObj = {
serverTime: liveData.serverTime,
checksum: liveData.checksum,
events: [],
calls: liveData.calls
},
events = [],
i;
if(liveData.events) {
for(i = 0; i < liveData.events.length; i++) {
events.push({
id: liveData.events[i].id,
name: liveData.events[i].details[1],
freeText: liveData.events[i].details[2],
});
}
liveDataObj.events = events;
}
return liveDataObj;
}
$rootScope.liveData = transformLiveData(liveDataPoller.getData());
}])
المحلول
المشكلة هي أن الخط يعود liveData
في خدمتك أعدم عندما $http
الدعوة في التقدم ، وأود أن التفاف liveData
كائن حول وعد والعمل مع هذا الوعد في وحدة تحكم.أو ، كنهج مان الفقراء ، هل يمكن مشاهدة liveData
كائن في وحدة التحكم الخاصة بك:
$scope.$watch(liveDataPoller.getData,function(value){
console.log(value);
},true)
لا تنتمي إلى StackOverflow