如何在Angular中有效地使用$ timeout?

时间:2017-10-16 12:52:46

标签: angularjs

我有以下代码不起作用:

 $scope.function_A();
 $scope.function_B();

并且这可以工作:

 $scope.function_A();
 $timeout(function(){
     $scope.function_B();
 }),100;

这是因为function_B引用了Angular尚未创建的指令。我相信这就是使用$timeout解决问题的原因。

我的问题是:如何确保100 millisecond超时正确且始终有效?以某种方式检测function_A完成而不是使用$timeout

是否更好?

2 个答案:

答案 0 :(得分:1)

使用回调机制

$scope.function_A(callback){
  // your implementation
  callback() // add it at the end
}

现在拨打function_B

内的function_A
$scope.function_A(function(){
  $scope.function_B();
});

答案 1 :(得分:1)

你可以使用Promises。

如果你需要函数A来完成它的工作,那么在调用函数B之前,最好让它返回一个promise。一些角度服务具有已经返回Promise的方法,例如, $http.get。通过使用$q,您可以准备自己的承诺。例如:

$scope.function_A = function() {
  //function code
  return $q.when();
}

$scope.function_A().then(function() {
  $scope.function_B();
});

详细了解$q和Promises here