非同期操作から確実にデータを取得したい場合、処理する最善の方法は、ソースから promise を返し (連鎖します)、それを で使用することOpenModal
です。これにより、モーダルをクリックするたびにデータが常に返され、同期の問題が発生しなくなります。
$scope.loadEvents = function () {
var items = listEvents();
return items.then(function (data) { //Make the loadEvents return a promise
return data; //return the data after any mapping or anything you may want to do
});
};
$scope.openModal = function (data) {
$scope.loadEvents().then(function(data){ //
lastTime = data;
});
};
応答がまだサーバーから返されていないときに複数の同時呼び出しを回避するために、以前に作成したものと同じ promise を返すことができます。
var _cachedPromise;
$scope.loadEvents = function () {
var items = listEvents();
//Actually you could chain all these together but for clarity steps have been broken down.
if(_cachedPromise) return _cachedPromise;
_cachedPromise = items.then(function (data) { //Make the loadEvents return a promise
return data; //return the data after any mapping or anything you may want to do
});
//Cleanup promise to make fresh calls.
_cachedPromise.finally(function(){
_cachedPromise = null;
});
return _cachedPromise;
};
しかし、このキャッシュ約束ロジックは、理想的にはコントローラーではなくサービスで処理する必要があります...