データベースからフェッチされたデータ配列に依存する関数を実行するために、Angular 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}));
}
問題は、データ配列が設定される前に promise が実行され、長さが常に 0 として表示されることです。ただし、promise の代わりにタイムアウトを使用すると、データ配列が設定され、長さが正しく表示されます。
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;
});