异步函数的同步调用
在某些特定场景中,可能需要强制异步调用在同步代码库中同步运行。虽然它通常不被认为是最佳实践,但实现它的方法如下:
通过轮询进行阻塞
首先,需要注意的是,真正阻塞 JavaScript 执行线程而不需要冻结 UI 是不可行的。但是,可以通过定期检查异步操作的完成来模拟阻塞。
function doSomething() { var data; function callback(d) { data = d; } myAsynchronousCall(param1, callback); // Poll until the data is set by the callback while (!data) { // Sleep for a short duration to avoid excessive polling } return data; }
这种方法有效地阻塞调用函数,直到调用回调为止。然而,它需要频繁的轮询,效率很低。
基于回调的方法
更干净、更高效的解决方案是向原始异步传递一个回调函数call.
function doSomething(callback) { myAsynchronousCall(param1, function(data) { callback(data); }); }
修改后的 doSomething() 函数现在将回调作为参数,将使用异步调用返回的数据。
doSomething(function(data) { console.log(data); });
此方法允许在同步代码中无缝处理异步调用,而不会阻塞或过度轮询。
以上是如何使 JavaScript 中的异步函数同步运行?的详细内容。更多信息请关注PHP中文网其他相关文章!