我正在開發使用AngularJS & PersistenceJS的應用程序。AngularJS Defer.promise工作不正常
我得到處理異步調用麻煩的
控制器:
cars.controller('CrashWidgetOneCtrl',function($scope, $location, $routeParams, CrashServices){
if($routeParams.crashId){
$scope.data = {};
console.log("CrashID: "+$routeParams.crashId);
crashId = $routeParams.crashId;
alert(1);//Works
CrashServices.getCrashDetails($scope, crashId).then(function(result){
console.log(result);
alert(2);//Never Fires
});
alert(3);//Gets executed
}else{
console.log("N");
}
});
服務:
cars.factory('CrashServices', function($http, $location, $q, CommonServices,$rootScope, $timeout){
return{
getCrashDetails:function($scope, crashId){
var deferred = $q.defer();
// Get user details if any
$scope.$apply(function(){
var crashInfoTable = App.CrashInfoTable.all();
alert(4);
crashInfoTable.list(null, function (results) {
alert(5);//This also doesn't work
deferred.resolve();
});
});
return deferred.promise;
}
}
});
任何幫助將不勝感激。非常感謝。
注意:我正在使用PersistenceJS。
我猜App.CrashInfoTable.all()也是一個異步調用。什麼是resturn類型?還有一個承諾? – michael
如果crashInfoTable的回調沒有被調用,那麼promise就不會被解析。所以Defer.promise確實按預期工作。它不會觸發成功回調函數直到解決。模型可能有問題嗎?看看這個鏈接https://groups.google.com/forum/#!topic/persistencejs/eIfuqyXK09E –
@michael:App.CrashInfoTable.all()不是異步的..林不知道返回類型...如何我可以知道嗎? –