为什么我的$ q决心和诺言不能像我认为的那样起作用?

英戈瓦尔斯

我总是遇到$ q的问题

这是一个示例,其中立即.then触发了

    function doit() {
            var deferred = $q.defer();

            var modalInstance = $modal.open({
                template: '<p>this is modal</p><a ng-click="ok()">ok</a>',
                controller: function ($scope, $modalInstance) {
                    $scope.ok = function () {
                        $modalInstance.close();
                    };
                }
            });

            modalInstance.result.then(function () {
                console.log('ok');
                deferred.resolve();
            }, function () {
                console.log('Modal dismissed');
            });

            return deferred.promise;
        }

别处:

    $scope.service.doit().then(
                $scope.variable = 5
            );

http://jsfiddle.net/IngoVals/stqwanhm/

在尝试为另一个.then根本不触发的类似设置建模时,我在Fiddle中得到了这个。这里发生了什么?

TJ人群

您正在将值传递5then这里:

$scope.service.doit().then(
    $scope.variable = 5
);

该代码如下运行:

  1. $scope.variable 被赋值 5

  2. 赋值表达式的结果(即赋值5)传递到then

无论这些事情发生的时候了,当你打电话then他们不等待承诺被兑现。

你想一个传递函数then,而是和具备的功能设置变量:

$scope.service.doit().then(function() {
    $scope.variable = 5
});

现在,您要传递一个函数。代码的功能不运行,直到它叫,它会在以后的承诺得到解决。

更新小提琴

好消息和坏消息是,从ES6开始,这将变得更加简洁,因为ES6引入了“胖箭头”功能:

$scope.service.doit().then(() => $scope.variable = 5);

这还将创建一个函数并将其传递到then(在启用ES6的引擎上)。

我说这既是好消息又是坏消息,因为它既简洁又好(好!),而且在阅读时也很容易错过(坏!)。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么这个宏不能像我想的那样工作?

为什么 indexOf() 和 contains() 不能像我在 Java 中预期的那样工作?

Scanner.nextLine()不能像我认为的那样工作

我不知道为什么这不像我认为的那样打印

为什么悲观锁定在 psql 中对我不起作用?代码不像我期望的那样并发

为什么这个 R 脚本不像我认为的那样对矩阵进行排序?

为什么我不能直接调用的承诺的决心()在setTimeout函数

我认为我的 hql 是对的,为什么我不能运行它?

为什么 DateOffset.rollback() 不能像我期望的那样在几天/几小时内工作?

为什么 java 中的 while(true) 不能像我在线程中预期的那样工作

我是编程新手,我找不到为什么这段代码不能像我希望的那样工作

蟒蛇 3.6.5。为什么 OR 不像我期望的那样工作?

为什么mutate不会像我期望的那样工作?

为什么perl regex不像我需要的那样贪婪?

为什么 python 字典不像我期望的那样工作?

为什么我认为错了?

CoordinatorLayout不能像我想要的那样工作

Powershell 不能像我希望的那样工作

为什么我不能使功能方法起作用?

为什么我是 NaN

为什么我是 CrashLoopBackOff

为什么我不能居中?

为什么我不能居中?

为什么我不能悬停?

为什么我的xpath不起作用

为什么我的更新不起作用?

为什么我的片段不起作用

为什么我的RewriteRule不起作用

为什么我的内联不起作用?