この質問がさまざまな方法で何度も尋ねられたことは知っていますが、次の問題に対する適切な解決策を見つけるのにまだ苦労しています.
外部関数から戻る前に、この非同期的に実行される内部関数のコールバックが完了するのを待つにはどうすればよいですか?
function outer() {
var result = false;
var innerAsynch = function() {
result = true;
}
setTimeout(innerAsynch, 1000);
waitForInnerAsynch(); //blocking
return result; //true
}
1) 私はこれが 99.999% のユースケースで悪い習慣であることをよく知っています。
2)このコードを完全に再構築してください...私の唯一の要件は、innerAsynch()が完了して次のテストに合格するまでブラウザをブロックする何かをouter()が返すことです:
if(outer()) {
//1 second later.... yippee!
}
また、私はjQueryを使用していますが、プラグインを使用するのが本当に意味がない限り、プラグインを使用しないことをお勧めします. ありがとう!
アップデート
私の目標は、outer() への同期呼び出し内に引数なしで非同期実行を完全にカプセル化することです。
言い換えれば、これはうまくいくはずです:
<a href="something" onclick="return outer()">A very slow link</a>
おそらくこれは実際には不可能であり、その場合はコールバックを使用しても問題ありませんが、その理由をよりよく理解したいと考えています。