Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $q延迟不在Jasmine中继续发射_Javascript_Angularjs_Jasmine_Angular Promise - Fatal编程技术网

Javascript $q延迟不在Jasmine中继续发射

Javascript $q延迟不在Jasmine中继续发射,javascript,angularjs,jasmine,angular-promise,Javascript,Angularjs,Jasmine,Angular Promise,我正在创建一些单元测试,这些测试与我想要手动解决的承诺一起工作,并且我发现我的承诺延续似乎永远不会实现。因此,我在jasmine调试面板中打开控制台,在窗口对象上放置对$q的引用…然后 d = $q.defer() d.promise.then(x => console.log(`done`, x)) d.resolve(5) 没有记录任何内容 怎么回事?!现在$q不知怎么起作用了吗?它不是像世界上所有其他延迟的实现一样工作吗?我读错他们的文档了吗?上述承诺怎么可能得到解决,但却无法继续

我正在创建一些单元测试,这些测试与我想要手动解决的承诺一起工作,并且我发现我的承诺延续似乎永远不会实现。因此,我在jasmine调试面板中打开控制台,在窗口对象上放置对$q的引用…然后

d = $q.defer()
d.promise.then(x => console.log(`done`, x))
d.resolve(5)
没有记录任何内容

怎么回事?!现在$q不知怎么起作用了吗?它不是像世界上所有其他延迟的实现一样工作吗?我读错他们的文档了吗?上述承诺怎么可能得到解决,但却无法继续下去

AngularJs 1.5.8

在本例中记录了5次

角度。模数PP,[] .runfunction$q{ var d=$q.defer; d、 promise.thenx=>console.log`done`,x; d、 决议5; }; 承诺范例
Jasmine测试不需要调用$rootScope.$apply吗?@georgeawg-huh?由于某种原因,$q是否与消息摘要绑定在一起?我只是假设这不会是因为……天哪,这世上没有理由。AngularJS通过提供自己的事件处理循环来修改正常的JavaScript流。这将JavaScript分为经典和AngularJS执行上下文。使用$apply从JavaScript输入AngularJS执行上下文。@georgeawg我知道这一切,但承诺的延续就在这里,完成后,请延迟运行此代码。它与作用域无关!我知道为什么你需要$apply来申请任何能改变DOM的东西,但承诺延续不会这样做!它们只是更多的代码。我曾假设,当承诺解决时,它将执行所有处理程序,然后调用$apply来刷新更改,但我没有意识到仅调用处理程序就需要另一个$apply。Angular团队做出了一个绝妙的选择,根本不记录这一点……关于$apply的需求,您是对的。如果你想编辑这个,我会把它标记为答案,告诉你,在运行块之外,或者其他一些$apply适用于你的东西,你实际上需要手动操作,才能让处理程序触发。是的,我理解这个图表,但我不明白的是,为什么他们会选择在angularjs上下文中执行continuations,并因此需要$apply来解雇他们。我想不出有什么特性或用例不是通过让它像其他地方一样工作来实现的。即使您在某个地方有一个$watch,它在触发时将处理程序添加到承诺中……它仍然可以作为处理程序添加到下一个循环中已解析的承诺触发器中。它似乎以一种没有记录的方式偏离了标准,根本没有任何好处