gpt4 book ai didi

javascript - 为什么我的 $q resolve 和 promise 不像我想的那样工作?

转载 作者:行者123 更新时间:2023-11-29 10:40:36 25 4
gpt4 key购买 nike

我总是对 $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/

我在尝试对另一个类似的设置建模时在 Fiddle 中得到了这个,其中 .then 根本没有触发。这是怎么回事?

最佳答案

它不会立即触发,只是您在 then 回调之外更新范围属性。这段代码:

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

不正确,应该是

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

另一个问题是所谓的deferred anti-pattern .避免创建冗余的延迟对象:

function doit() {
return $modal.open({
template: '<p>this is modal</p><a ng-click="ok()">ok</a>',
controller: function ($scope, $modalInstance) {
$scope.ok = function () {
$modalInstance.close();
};
}
}).result.then(function () {
console.log('ok');
}, function () {
console.log('Modal dismissed');
});
}

演示: http://jsfiddle.net/stqwanhm/2/

关于javascript - 为什么我的 $q resolve 和 promise 不像我想的那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004934/

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