Я использую угловое обещание для выполнения функций, зависящих от массива данных, полученного из базы данных.AngularJS Promise выполняется до получения данных из базы данных
Я использовал решение и обещаю сделать это, как показано ниже.
function Mainctrl($q,MyService){
var defer=$q.defer();
defer.promise
//The data im receiving in promise is from the resolve "MyService.getAll({ID :ID})"
.then(function(data){
$scope.mydata=data;
$scope.mylength=$scope.mydata.length;
console.log();
});
//This code MyService.getAll({ID :ID}) returns an array from the database, i am using that result array in promise as "data"
defer.resolve(MyService.getAll({ID :ID}));
}
Издание является обещание выполняется до того, как массив данных заполняется всегда показывает длину как 0. но я могу использовать тайм-аут, а не обещание, массив данных заполняется и длина показана правильно.
метод MyFactory GETALL является
app.factory("MyService", function($resource, $http) {
var resource = $resource("/rest/:ID ", { ID : "@_ID " },
{
'create': { method: 'POST' },
'getAll': { method: 'GET', isArray: true },
'get': { method: 'GET', isArray: false },
'update': { method: 'PUT' },
'destroy': { method: 'DELETE' }
}
);
return resource;
});
Вы уверены, что 'MyService.getAll' выполняет синхронное возвращение массива? Он очень похож на асинхронный метод. – Bergi
@ Bergi: Спасибо за помощь. это асинхронно. –
@MohamedHussain Можете ли вы показать метод 'MyService.getAll'? Это называется '$ http'? –