gpt4 book ai didi

javascript - $q 推迟在 Jasmine 中不触发延续

转载 作者:行者123 更新时间:2023-12-03 03:37:40 24 4
gpt4 key购买 nike

我正在创建一些与 promise 一起使用的单元测试,我想手动解决这些 promise ,但发现我的 promise 延续似乎永远不会被击中。因此,我在 jasmine 调试面板中打开控制台,在窗口对象上放置对 $q 的引用...并且

d = $q.defer()
d.promise.then(x => console.log(`done`, x))
d.resolve(5)

没有记录任何内容...

$q seems to never trigger continuations

这是怎么回事?! $q 现在可以正常工作了吗?它不是像世界上其他所有延迟实现一样工作吗?我读他们的( insanely meager )文档是否错误?怎么可能上面的promise得到了解决却没有继续执行呢?!

AngularJs 1.5.8

最佳答案

在此示例中记录“done 5”

angular.module("app",[])
.run(function($q) {
var d = $q.defer();
d.promise.then(x => console.log(`done`, x));
d.resolve(5);
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app">
<h1>Promise example</h1>
</body>

<小时/>

与浏览器事件循环集成

AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 分为经典执行上下文和 AngularJS 执行上下文。使用 $apply() 从 JavaScript 进入 AngularJS 执行上下文。请记住,在大多数地方( Controller 、服务),处理事件的指令已经为您调用了$apply

ES6 Promise 由 JavaScript 事件循环处理。 $q promise 由 AngularJS 事件循环处理。只有在 AngularJS 执行上下文中应用的操作才会受益于 AngularJS 数据绑定(bind)、异常处理、属性监视等。

对于 Jasmine 测试,使用 $rootScope.$apply() 进入 AngularJS 执行上下文。

有关详细信息,请参阅AngularJS Developer Guide - Integration with the browser event loop

关于javascript - $q 推迟在 Jasmine 中不触发延续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com