首页 >web前端 >js教程 >异步 JavaScript 函数能否同步执行而不冻结 UI?

异步 JavaScript 函数能否同步执行而不冻结 UI?

Patricia Arquette
Patricia Arquette原创
2024-11-16 18:40:03861浏览

Can Asynchronous JavaScript Functions Be Executed Synchronously Without Freezing the UI?

同步执行异步 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn