当前位置: 首页 > 面试题库 >

angularjs-承诺永远不会在控制器中解决

能烨华
2023-03-14
问题内容

在我的控制器中,我从另一项服务中获得了承诺。我在其中添加了“ then”子句,但从未调用过“ then”。

看到这个矮人:http
://plnkr.co/edit/dX0Oz1?p=preview
(javascript版本)

“ fakeLongRunningPromise”会创建一个承诺,该承诺会在2秒后自动解决。

一旦履行了诺言,我便在控制器本身中向控制台发送了一条便条。

我可以说该诺言正在得到解决,因为“解决诺言”已输出到控制台。为什么不输出“承诺已解决”?

认为承诺可能会“超出范围”,因为控制者返回了吗?


问题答案:

AngularJS承诺解析的结果在$ digest周期内异步传播。因此,then仅在进入$
digest循环时才调用向其注册的回调。在setTimeout执行“的AngularJS世界之外”,因此不会触发回调。

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

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

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



 类似资料:
  • 问题内容: 我正在使用茉莉花对angularjs控制器进行单元测试,该控制器在范围内将变量设置为调用返回promise对象的服务方法的结果: 服务内部: 在我的angularjs应用程序上下文中,这可以正常工作,但在茉莉花单元测试中则无法工作。我已经确认“ then”回调在单元测试中正在执行,但是$ scope.myVar承诺永远不会设置为回调的返回值。 我的单元测试: 另外,如果我将控制器更改为

  • 我想在每次加载页面时向服务人员发送一条消息。 第一次加载页面时,它调用寄存器(),然后侦听navigator.serviceWorker上的“控制器更改”事件,但这永远不会触发。 我如何知道何时可以开始发送邮件给服务人员?

  • 问题内容: AngularJS文档说: $ qpromise由模板引擎以角度识别,这意味着在模板中,您可以将附加到作用域的promise视为它们的结果值。 所以有人可以解释一下这种提琴无法正常工作的原因吗?不可能更改文本字段的值。但是分配保证$http服务返回作用域字段的工作就像一个超级按钮。 控制器: HTML: 问题答案: 您需要在promise对象上使用then()函数: 就您而言,我认为您

  • 本文向大家介绍AngularJS控制器继承自另一控制器,包括了AngularJS控制器继承自另一控制器的使用技巧和注意事项,需要的朋友参考一下 AngularJS里控制器继承,常用的就是作用域嵌套作用域。默认情况下,当前作用域中无法找到某个属性时,就会在父级作用域中进行查找,若找不到直至查找到$rootScope。 但有些情况下,rootScope下就是我们的controller,不可能将大量的公

  • 问题内容: 升级到1.2后,我的服务返回的promise行为有所不同…简单服务myDates: 在早期版本中,我可以在控制器中执行以下操作: 从getDates返回的promise可以直接绑定到Select元素。现在这不起作用,我被迫在控制器中对promise进行回调,否则数据将无法绑定: 文档仍然说: $ qpromise由模板引擎以角度识别,这意味着在模板中,您可以将附加到作用域的promis

  • 1)我的plist配置提供背景模式: 2) 在中,我有: 3) 我在委托中声明了协议。 4)我实现了以下方法,但它永远不会被触发。(只有当我用“XCode-”模拟获取时才有效 为什么?这是DP5测试错误吗?我应该雷达这个吗?