Javascript 为什么我的承诺中的功能没有运行

Javascript 为什么我的承诺中的功能没有运行,javascript,angularjs,Javascript,Angularjs,我听说$q和promise非常适合同步编程 我希望第二个函数在第一个函数超时后运行。所以基本上,我希望mt-first函数在第二个函数运行之前先完成运行 我的代码是: 点击我! angular.module('myApp',[]) .controller('myCtrl',['$scope','$timeout','$q',函数($scope,$timeout,$q){ $scope.functionOne=函数(){ 返回$q(函数(解析、拒绝){ $timeout(函数(){ 警惕(“

我听说$q和promise非常适合同步编程

我希望第二个函数在第一个函数超时后运行。所以基本上,我希望mt-first函数在第二个函数运行之前先完成运行

我的代码是:


点击我!
angular.module('myApp',[])
.controller('myCtrl',['$scope','$timeout','$q',函数($scope,$timeout,$q){
$scope.functionOne=函数(){
返回$q(函数(解析、拒绝){
$timeout(函数(){
警惕(“院长”);
}, 3000);
})
};
$scope.functionTwo=函数(){
警报(“无敌舰队”);
}
$scope.myClick=function(){
var promise=$scope.functionOne();
promise.then(函数(){
$scope.functionTwo();
},函数(){
警报(“失败”);
})
};
}]);


普朗克:

承诺是创造出来的,但从未解决过。但是已返回一个承诺:

$scope.functionOne = function(){
  return $timeout(function(){
    alert("dean");
  }, 3000);
};

承诺是创造出来的,但从未实现。但是已返回一个承诺:

$scope.functionOne = function(){
  return $timeout(function(){
    alert("dean");
  }, 3000);
};

在我看来,做你想做的事情的更好方法是:


在我看来,做你想做的事情的更好方法是:


因为您没有调用
resolve
reject
?是的,给出了正确的答案因为您没有调用
resolve
reject
?是的,给出了正确的答案Bergi的答案有什么不同?这取决于具体情况functionOne使用$timeout承诺来解决承诺。在我的回答中,您可以删除
$timeout(function(){},1000)并仅保留
defer.resolve({data::})和工作良好。它与Bergi的答案有什么不同?这取决于functionOne
使用$timeout承诺来解决承诺。在我的回答中,您可以删除
$timeout(function(){},1000)并仅保留
defer.resolve({data::})和工作良好。
$scope.functionOne = function(){
  var defer = $q.defer();

  $timeout(function(){
      defer.resolve({data:""}); // or defer.reject(data)
  }, 1000);

  return defer.promise;
};