$timeoutsetTimeoutテスト中に嘲笑されるのラッパーです。@MarkRajcok は、ブロック方法として使用できない理由について完全に正しいです。マークのソリューションも問題を解決します。しかし、コードの再配置が不可能な場合でも、朗報があります。
$timeoutpromise を返すため ( を参照$q)、実際に必要なものを連鎖させることができます。
$timeout( tempFunc, $scope.sync.getDelay() ).then( function() {
console.log("I'm called only after the timeout.");
$scope.sync.releasePrivilege();
});
console.log("But I get called immediately.");
そして、これは問題なく動作するはずです。それでもブロックしません。promise が解決された後にのみthen、呼び出し内の関数が実行されるようにするだけです。つまり、タイムアウトが完了し、メソッドが呼び出された場合にのみ実行されます。
さらに、必要に応じて、関数はデータを返すことができます。したがって、tempFunc成功を示すブール値が返された場合は、それにアクセスすることもできます。
$timeout( tempFunc, $scope.sync.getDelay() ).then( function( result ) {
if ( result ) {
$scope.sync.releasePrivilege();
} else {
// handle the error
}
});
そして、多くの喜びがありました。わーい。
注: ブラウザでスリープを実行すると、UI がロックされてしまうため、非常によくありません。非同期実行は、Web を素晴らしいプラットフォームにするものです!