BreezeJS を使用している Angular アプリケーションでデータ サービスをセットアップしようとしています。約束を解決した後、.then をコントローラーにファイルすることができません。データ サービスの風を介してデータベースからデータを取得しています。簡単な約束を返すこともできますが、 $q.all を使用して、すべてのデータがいつ見つかったかを知ることができるようにしたいと考えています。
私のコントローラーで`
ProApp.controller('caseInfoController', function caseInfoController($scope, $log, $timeout, caseDataService) {
/***initialize data ***/
// initializeApp();
ATPinitializeApp();
function ATPinitializeApp() {
$scope.MyStateList= caseDataService.getAllStates()
.then(function assignStates(data) {
$log.info("THIS THEN WILL NOT FIRE");
});
}
`
上記は、データ サービスからの約束が果たされたときに起動しません。
ProApp.factory('caseDataService', function ($log, $q)
{
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
var servicename = "http://localhost:60882/breeze/SPLBreeze";
var manager = new breeze.EntityManager(servicename);
var caseDataService =
{
getAllStates: getAllStates,
};
return caseDataService;
/*** implementation details ***/
function getAllStates()
{
var myStatePromise = $q.defer();
var query = breeze.EntityQuery
.from("state");
manager.executeQuery(query)
.then(function (data) {
$timeout(function () { myStatePromise.resolve(data); }, 200);;
});
return myStatePromise.promise;
};
どんな助けでも大歓迎です。$q の約束が正しく設定されているかどうかは 100% わかりません。最終的には、 $q.all を使用して、さまざまな promise の配列がいつ解決されたかを判断し、ユーザーへのメッセージを更新できるようにしたいと考えています。次のイベントループで変更が発生したことを認識するには、タイムアウトを使用して角度を付ける必要があることを読んでいます。