AngularJS dataservice使用breezejs它没有解决诺言

时间:2013-07-23 20:03:47

标签: angularjs breeze promise

我正在尝试在使用breezeJS的Angular应用程序中设置数据服务。在我解决了我的承诺后,我无法让.then在我的控制器中存档。我通过数据服务中的breeze从数据库中获取数据。我可以简单地传回微风承诺,但我希望能够使用$ 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承诺。最后我想使用$ q.all来确定何时解决了各种promise的数组,以便我可以向用户更新消息。我一直在读,我需要使用超时来获得角度,以便意识到在下一个事件循环中发生了变化。

2 个答案:

答案 0 :(得分:4)

你正盯着一个Angular $ q bug的桶。如果您愿意,可以阅读here

这几乎没有像my answer to this related StackOverflow question中的建议那样有用,我在其中展示并描述了从Q.js承诺到$ q承诺的适配器。

答案 1 :(得分:0)

我从来没有使用微风,但我认为你的问题是你没有在成功回调中返回任何东西..

  /***initialize data ***/
    . . .
    function ATPinitializeApp() {

        $scope.MyStateList=   caseDataService.getAllStates()
         .then(function assignStates(data) {
             $log.info("THIS THEN WILL NOT FIRE");  
             return data; // If you don´t return anything nothing will be added to the scope.
         });

    }

此外,getAllStates函数的$ timeout不应该是必需的,因为angular异步解析promises(它使用$ rootScope对分辨率进行排队。$ evalAsync)

function getAllStates()
{
. . .

  manager.executeQuery(query)
    .then(function (data) {
       // I believe the $timeout that was in this function is not necessary
       myStatePromise.resolve(data);
    });

  return myStatePromis

e.promise;

}

希望这可以帮助你一点点。

此致

卡尔斯