2016-11-25 5 views
1
var four = function() { 
    $scope.text += '4'; 
} 

var five = function() { 
    $scope.text += '5'; 
} 

$scope.text = '1'; 

$timeout(function() { 
    $scope.text += '2' 
}); 

$timeout($scope.text += '3'); 

$timeout($scope.$eval(four)); 

$timeout(five); 

Результат: 13425

Согласно последовательности вызова должен быть результат 12345. Строки ниже выполняются немедленно:

$timeout($scope.text += '3'); 
$timeout($scope.$eval(four)); 

И если вы добавляете параметр времени, как показано ниже, время игнорируется.

$timeout($scope.text += '3', 1000); 
$timeout($scope.$eval(four), 1000); 

https://jsfiddle.net/uj9yx9c7/1/

+2

Вот как работает JavaScript. Вот почему '$ timeout' принимает функцию – taguenizy

+0

Что такое _ встроенная команда _ _? – zeroflagL

+0

Я бы назвал выражение. Я исправил заголовок. – Richard

ответ

3

$timeout($scope.text += '3');

в этой линии $scope.text += '3' не является функцией, а выражение. поэтому он будет выполнен после $scope.text = '1';.

Чтобы отложить утверждение, вам необходимо обернуть этот оператор функцией и передать его $timeout или setTimeout. вы не можете отложить заявление.

Заменить $timeout($scope.text += '3'); на $timeout(function(){$scope.text += '3'}). вы получите выход 14235.

И $scope.$eval() оценивает функцию или выражение синхронно, так 4 будут добавляться перед тем 235. изменить его на

$timeout(function(){$scope.$eval(four)}) 

получите ожидаемый результат 12345

Смежные вопросы