我知道这个问题已经以许多不同的方式被问过很多次,但我仍然无法确定以下问题的良好解决方案。
在从外部函数返回之前,如何等待这个异步执行的内部函数的回调完成?
function outer() {
var result = false;
var innerAsynch = function() {
result = true;
}
setTimeout(innerAsynch, 1000);
waitForInnerAsynch(); //blocking
return result; //true
}
1) 我很清楚这对 99.999% 的用例来说是不好的做法,所以请不要告诉我不应该这样做!
2)请随意完全重构这段代码......我唯一的要求是outer()返回的东西会阻止浏览器,直到innerAsynch()完成并通过以下测试:
if(outer()) {
//1 second later.... yippee!
}
我也在使用 jQuery,但我宁愿不使用插件,除非这样做真的很有意义。谢谢!
更新
我想重申一下,我的目标是将异步执行完全封装在对 external() 的同步调用中,不带参数。
换句话说,这应该有效:
<a href="something" onclick="return outer()">A very slow link</a>
也许这实际上是不可能的,在这种情况下我可以使用回调,但我想更好地理解为什么会这样。