我在服务层有一个REST调用,我在其上定义了一个使这个异步调用成为同步调用的promise,我从我的控制器方法调用它。以下是代码:
服务方式:
app.lazyload.factory('myService',['$http','$q', function($http,$q) {
return{
showAll :function ()
{
var deferred = $q.defer();
$http.post('rest/getAll?cd='+ (new Date()).getTime())
.success(function(data)
{
deferred.resolve(data);
})
.error(function(data)
{
deferred.reject(null);
console.log("in error block");
});
return deferred.promise;
}
};
}]);
控制器方法:
$scope.showAll = function()
{
var promise = myService.showAll();
promise.then(function success(data) {
$scope.allitems = data;
console.log(data);
console.log('$scope.allitems'+$scope.allitems[0].name);
$scope.showAllitems = true;
blockMyUI();
}, function error(msg) {
console.error(msg);
});
};
在调试这个javascript时,如果我停止它2秒钟我得到了响应,但如果不停地做,我不会得到它。这意味着所有REST调用都正常工作,但我的“承诺”中存在一些问题。这个承诺不是等待REST调用完成我想要的。
答案 0 :(得分:0)
尝试在控制器中使用$ watch。
var dataFromFactory = '';
myService.showAll().then( function(data){
dataFromFactory = data;
}
$scope.$watch(function () {
return dataFromFactory;
},
function (val) {
$scope.allitems = val;
console.log(val);
//the rest value you want.
}, false);