2017-10-16 106 views
0

我有下面的代码不起作用:

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

,这是否工作:

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

这是由于function_B是指尚未创建一个指令的事实但由Angular。我相信这就是为什么使用$timeout解决了这个问题。

我的问题是:如何确保100 millisecond超时是正确的,并将始终工作?以某种方式检测function_A完成而不是使用$timeout更好吗?

+0

您可能需要与承诺的工作,如果你的函数有一个延迟。尝试使用** $ q **承诺。这样,您可以在第一个异步解析之后调用另一个函数。 –

回答

1

可以使用的承诺。

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

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

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

了解更多关于$q并承诺here

1

回调机制

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

现在叫function_Bfunction_A

$scope.function_A(function(){ 
    $scope.function_B(); 
}); 
相关问题