我正在用angularjs茉莉花和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顺序为1,2

  • 为什么不会then执行时$rootScope.$digest()是上面? 据我了解,承诺已经解决?

===============>>#1 票数:0

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

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

AngularJS $ q服务文档

  ask by Ivan V. translate from so

未解决问题?本站智能推荐: