“不要告诉我应该怎么做”正确的方式”之类的”
好。但您确实应该以正确的方式来做…
“我需要一个具体的示例来说明如何使其阻塞…而无需冻结UI。如果在JS中可能发生这种情况。”
不,如果不阻止UI,就无法阻止正在运行的Javascript。
由于缺乏信息,很难提供解决方案,但是一个选择可能是让调用函数进行一些轮询以检查全局变量,然后将回调设置
data为全局。
function doSomething() { // callback sets the received data to a global var function callBack(d) { window.data = d; } // start the async myAsynchronousCall(param1, callBack);} // start the functiondoSomething(); // make sure the global is clearwindow.data = null // start polling at an interval until the data is found at the globalvar intvl = setInterval(function() { if (window.data) { clearInterval(intvl); console.log(data); }}, 100);所有这些都假定您可以修改
doSomething()。我不知道这是不是真的。
如果可以修改它,那么我不知道为什么您不只是传递一个
doSomething()要从另一个回调中调用的回调,但是我最好在遇到麻烦之前停下来。;)
哎呀 您提供了一个示例,表明它可以正确完成,因此,我将展示该解决方案…
function doSomething( func ) { function callBack(d) { func( d ); } myAsynchronousCall(param1, callBack);}doSomething(function(data) { console.log(data);});因为您的示例包含传递给异步调用的回调,所以正确的方法是传递
doSomething()要从该回调调用的函数。
当然,如果这是回调唯一要做的事情,那么您将直接通过
func…
myAsynchronousCall(param1, func);



