同步調用非同步JavaScript 函數
您要求在不凍結UI 的情況下同步非同步調用,這是一個獨特且具有挑戰性的問題。不幸的是,在不停止 UI 的情況下阻止 JavaScript 執行是不可行的。
一種潛在的解決方案涉及使用全域變數進行資料交換。非同步呼叫的回呼可以修改包含所需資料的全域變數。同時,輪詢機制會定期檢查全域變量,直到資料可用。
function doSomething() { window.data = null; // Clear global data myAsynchronousCall(param1, callBack); var intvl = setInterval(function() { if (window.data) { clearInterval(intvl); console.log(window.data); } }, 100); } function callBack(d) { window.data = d; }
但是,根據您提供的範例,更合適的解決方案是遵循最佳實踐並傳遞回調函數到doSomething():
function doSomething(func) { function callBack(d) { func(d); } myAsynchronousCall(param1, callBack); } doSomething(function(data) { console.log(data); });
透過將函數傳遞給doSomething(),您可以正確利用非同步調用,而無需訴諸有問題的技術。
以上是如何在不阻塞UI的情況下有效呼叫非同步JavaScript函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!