同步执行异步 JavaScript 函数
在某些情况下,可能需要同步执行异步 JavaScript 函数,但不会冻结 UI 。虽然这通常不被认为是好的做法,但在某些特定情况下可能被认为是必要的。
挑战
目标是阻止函数直到回调被调用,而不冻结 UI。这提出了一个挑战,因为阻止 JavaScript 通常会导致 UI 冻结。
可能的解决方案
一种可能的解决方案涉及使用轮询来检查回调设置的全局变量。下面是一个示例:
function doSomething() { // Callback sets received data to a global variable function callBack(d) { window.data = d; } // Start the async myAsynchronousCall(param1, callBack); } // Start the function doSomething(); // Clear the global data window.data = null; // Poll at an interval until data is found in the global var intvl = setInterval(function() { if (window.data) { clearInterval(intvl); console.log(data); } }, 100);
此方法允许调用函数阻塞,直到从回调接收到数据为止,而不会冻结 UI。但是,它假设可以修改 doSomething() 函数以使用全局变量。
最佳实践
需要注意的是,这种方法被认为是次优的解决方案。理想情况下,异步调用应该使用回调或承诺来处理,而不是阻塞函数。然而,在某些无法轻易修改的代码库中,这可能是必要的临时解决方法。
以上是异步 JavaScript 函数能否同步执行而不冻结 UI?的详细内容。更多信息请关注PHP中文网其他相关文章!