我使用$q.when来绕过其他的lib承诺.
它的作用就像一个魅力,但是当我尝试在Karma中运行它时,即使我运行$digest,甚至在超时之后,promise也无法解决(done()).
以下是示例代码:
它的作用就像一个魅力,但是当我尝试在Karma中运行它时,即使我运行$digest,甚至在超时之后,promise也无法解决(done()).
以下是示例代码:
describe('PouchDB',function () { var $q,$rootScope; beforeEach(inject(function (_$rootScope_,_$q_) { $rootScope = _$rootScope_; $q = _$q_; })); it("should run",function (done) { function getPromise() { var deferred = Q.defer(); deferred.resolve(1); return deferred.promise; } $q.when(getPromise()) .then(function () { done(); // this never runs }); $rootScope.$digest(); });
为什么?这是什么原因?我真的不能得到它
更新(解决方法)
我不明白为什么$q.when没有在Karma解决 – 它有一些与nextTick功能,但我无法调试的问题.
相反,我抛开$q.when并且写了将PouchDB(或任何其他类似Q)转换为$q的简单函数:
.factory('$utils',function ($q,$rootScope) { return { to$q: function (promise) { var deferred = $q.defer(); promise.then(function (result) { deferred.resolve(result); $rootScope.$digest(); }); promise.catch(function (error) { deferred.reject(error); $rootScope.$digest(); }); return deferred.promise; } } })
从
How to resolve $q.all promises in Jasmine unit tests?起,似乎诀窍是:
$rootScope.$apply();
我只有同样的问题,这对我有用在作出这一呼吁时,承诺得到解决.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。