gpt4 book ai didi

angularjs - promise 永远不会在 Controller 中解决

转载 作者:行者123 更新时间:2023-12-04 05:54:04 24 4
gpt4 key购买 nike

在我的 Controller 中,我得到了另一个服务的 promise 。我给它添加了一个“then”子句,但从来没有调用过“then”。

看到这个plunker:http://plnkr.co/edit/dX0Oz1?p=preview ( javascript version )

'fakeLongRunningPromise' 创建一个在 2 秒后自行解决的 promise 。

在 Controller 本身中,一旦 promise 得到解决,我就会向控制台发送一条注释。

我可以说 promise 正在解决,因为它输出到控制台的“正在解决 promise ”。为什么不输出“ promise 已解决”?

认为可能因为 Controller 返回, promise 会“超出范围”?

最佳答案

AngularJS promise 解析的结果在 $digest 循环内异步传播。所以,回调注册于 then只会在进入 $digest 循环时调用。 setTimeout执行“在 AngularJS 世界之外”,因此不会触发回调。

解决方法是使用Scope.$apply$timeout服务。这是带有 $apply 的版本:

      window.setTimeout(function() {
console.log("Resolving promise");
$scope.$apply(function(){
deffered.resolve("worked");
});
}, 2000);

这是一个固定的 plunk (JavaScript): http://plnkr.co/edit/g5AnUK6oq2OBz7q2MEh7?p=preview

关于angularjs - promise 永远不会在 Controller 中解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246442/

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