为什么我的承诺里面的函数没有运行
Why is the function inside my promise not running
我听说$q和promise非常适合同步编程。
我希望第二个函数在第一个函数之后运行,因为第一个函数有超时。所以我想让mt第一个函数在第二个函数操作前先完成运行
我的代码是:<head>
<link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="myCtrl">
<button ng-click="myClick()">Click Me!</button>
</div>
<script type="text/javascript">
angular.module('myApp', [])
.controller('myCtrl',['$scope', '$timeout', '$q', function($scope, $timeout, $q){
$scope.functionOne = function(){
return $q(function(resolve, reject){
$timeout(function(){
alert("dean");
}, 3000);
})
};
$scope.functionTwo = function(){
alert("armada");
}
$scope.myClick = function(){
var promise = $scope.functionOne();
promise.then(function(){
$scope.functionTwo();
}, function(){
alert("fail");
})
};
}]);
</script>
</body>
砰砰作响:https://plnkr.co/edit/6hJF4mxrCQ17XXA43eUl?p=preview
承诺被创建但从未被解决。但你根本不需要它!$timeout
已经返回一个承诺:
$scope.functionOne = function(){
return $timeout(function(){
alert("dean");
}, 3000);
};
在我看来,做你想做的事的更好的方法是:
$scope.functionOne = function(){
var defer = $q.defer();
$timeout(function(){
defer.resolve({data:""}); // or defer.reject(data)
}, 1000);
return defer.promise;
};
相关文章:
- 关注函数运行过的表单字段(新手)
- 在函数运行时显示对话
- Javascript - 加载函数运行时未定义的变量
- Javascript变量在函数运行后不断重置自身
- 如何让 setTimeout 函数运行,然后停止使用循环
- 如何在函数运行之前隐藏 CSS
- 使用 .on 函数运行 jQuery 声明函数
- 在函数运行期间关闭 onClick
- jQuery停止函数运行两次
- Javascript:如何在函数运行完成之前对文档进行更改
- nodejs - 为什么我的异步函数运行两次
- 在传递值后停止函数运行
- 如何在 javascript 中的函数中将字符串作为函数运行
- 如何停止计时器函数运行
- 在浏览器空闲后保持设置超时函数运行
- JQuery:阻止一个函数运行,直到满足另一个函数条件“X”时间
- Angular 提供程序服务需要 init 函数运行一次
- 更新 Angular $interval 中的变量会导致其他函数运行
- 如何阻止此 setTimeout 函数运行
- 传入函数数组作为参数,对于函数中的每个函数运行函数