then
回调承诺不被调用的可能原因是什么?
例如:
function testPromise() {
console.log("this gets logged")
return $q(function(resolve, reject) {
console.log("this too")
resolve("test")
console.log("and this");
$rootScope.$apply()
console.log("and this too");
})
}
testPromise().then(function(result){
console.log("this never gets logged")
});
我没有看到明显的东西吗?谢谢。
答案 0 :(得分:0)
这取决于您使用的AngularJS的版本。
在AngularJS 1.2 $q was not a function中,而是要求您创建一个名为“延迟”的东西并单独返回一个承诺。
但是,您应该在控制台中收到错误,告诉您是否是这种情况。
答案 1 :(得分:0)
这完全取决于你从哪里打电话$rootScope.$apply()
。如果它在摘要周期的执行期间,则您的调用将导致错误并停止执行脚本。
您的示例在没有$rootScope.$apply()
的情况下完美运行。您能否提供更多关于您打算如何使用它的背景信息?
答案 2 :(得分:0)
我希望这会有所帮助。 我想这就是你如何使用$ q。 所以我做了一个有效的例子。
在我的示例中,我在服务中使用$ q并使用$ timeout延迟其响应 我删除了$ apply()我不知道你为什么要用它。
app.factory('TestingService', TestingService);
function TestingService($q, $timeout) {
return {runPromise:runPromise};
function runPromise() {
return $q(function(resolve, reject) {
console.log("inside my $q")
$timeout(function(){
resolve("$q is working fine");
}, 2000); //Lets use $timeout, just to see the result
});
};
}
然后
TestingService.runPromise().then(
function(result){
console.log('result::',result);
vm.test = result;
});
https://developer.android.com/guide/components/activities.html#CoordinatingActivities
我希望它有所帮助。
答案 3 :(得分:0)
感谢大家的回答。事实证明,有些人提到它与我调用此函数的位置有关。所以从常规函数调用工作。从另一个then
的回调中调用也有效,但是从context.sync().then()
调用,其中context.sync()
是Word Add-in
的承诺(谁知道它实际上是什么) - 不。所以我最终将我的函数转换为回调,而不是作为一个承诺。