测试承诺与angularjs执行混乱的顺序

时间:2014-04-20 01:34:46

标签: angularjs angularjs-scope promise q

我正在用angularjs jasmine和sinonjs测试一个承诺。 我对有关承诺的事情感到困惑。这是我的代码:

it('should return data with length 4 ', inject(function ($rootScope) {              
  var storageData;

  mockDualStorage.getData.returns($.when(''));
  // mockDualStorage.getData is called by getStorageData

  // $rootScope.$digest() // not working here

  dataGetter.getStorageData().then(function (data) {
    console.log(1);
    storageData = data;
  });

  $rootScope.$digest(); // only working here

  console.log(2);
  expect(storageData.length).toBe(4)// ok

  }));

这里的一些事情很奇怪。

如果我将$rootScope.$digest()置于dataGetter.getStorageData() then函数之上,则永远不会执行。

  • $rootScope.$digest()低于then时,console.log执行,then的顺序为1,2

  • 为什么$rootScope.$digest()在{{1}}以上时才会执行{{1}}?据我所知,承诺已经解决了?

1 个答案:

答案 0 :(得分:0)

在仔细阅读文档之后,找到了答案。

  

Kris Kowal的Q和$ q之间的差异:   有两个主要区别:$ q与$ rootScope.Scope Scope模型观察机制在角度中集成,这意味着更快地将分辨率或拒绝传播到模型中,避免不必要的浏览器重绘,这将导致UI闪烁。

AngularJS $q service documentation