我正在用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

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

3回复

如何使用Jasmine测试AngularJS控制器在Promise中返回的值?

我有一个控制器,它暴露了一个在休息调用后返回一些文本的函数。 它工作正常,但我无法使用Jasmine进行测试。 测试中的promise处理程序内的代码永远不会执行 。 控制器: 考试:
2回复

Angularjs UI是否不会使用由Promise更新的服务绑定进行更新?

我花了一整夜试图解决这个问题,最终决定放弃并寻求帮助。 我正在使用AngularJS构建一个Web应用程序,该应用程序旨在与Flakey连接(移动设备)一起使用。 我正在尝试为用户实现向服务器添加对象(无论是约会,书本还是无关紧要)的功能。 处理与服务器同步对象的服务:
3回复

AngularJS茉莉花承诺测试由于超时而失败

我正在尝试测试我的登录控制器,如下所示: 其中signIn函数为: 但是它总是失败,并显示为“未在指定的超时时间内调用异步回调...”
1回复

如何使用$ q从angularJS中的$ broastcast获得承诺

现在,我的控制器代码如下所示: 我希望在处理广播后打开模式实例。 有没有办法做到这一点? 更新:我一直在向后思考这个问题。 无论如何,我本来打算在模态实例之后进行广播。 PS:虽然我确实对modalinstance.opened回调有问题,但是我不得不设法解决它。 我仍
2回复

AngularJS:循环承诺

我无法做答应循环。 我拨打服务电话以获取提供商列表,然后为每个提供商拨打另一个服务电话以获取客户。 提供者具有1个或更多客户。 因此,最终的客户清单将被装饰和显示。 我正在尝试以其他格式实现: 我写了下面的代码,那是行不通的
1回复

AngularJs范围属性和Promise

我有以下代码: 第15行中的$ scope.geocodedResult是一个承诺,迟早将成为结果值,并且作用域应刷新。 不幸的是,这不会发生。 如果我这样做的代码工作 我究竟做错了什么? 更新: 我现在仅尝试使用$ q,但无法正常工作: 断点 与
2回复

如何用$ q在AngularJs中多回调一个Promise?

我正在使用下面的代码来简化后端请求,但是我没有抓住如何调用成功方法或错误方法。 如何达到代码中注释的预期行为? 这是使用上面代码的代码:
1回复

在AngularJS中进行Q promise函数调用阻塞

在角度服务中,我们将公开一个提供令牌的函数,该函数应该被阻塞,直到令牌被加载。 服务中的关键部分 如何将其转换为阻止功能代码? 这样service.getToken(); 在令牌存在之前一直处于阻塞/同步状态。 返回承诺/回调不是解决方案。
1回复

AngularJS Promise不会检索深度包装的jQuery $ .post调用

我正在开发一个JavaScript库和AngularJS前端。 JavaScript库需要具有可移植性,因此它不能依赖AngularJS。 我们使用一个非常标准的servlet查询模式: 此queryService函数由库中的其他函数调用。 您可以看到queryService返回任
1回复

使用promise API进行递归

请在这里找到代码 http://plnkr.co/edit/zwCYGQaxyGyr7kL6fLKh?p=preview 我正在尝试使用使用promise的异步函数进行递归。 我想串行发生(因此没有$ q.all),并且想要等到所有节点都处理完then触发主调用。 换句话说, Y