非同步函數的同步呼叫
在某些特定場景中,可能需要強制非同步呼叫在同步程式碼庫中同步運作。雖然它通常不被認為是最佳實踐,但實現它的方法如下:
透過輪詢進行阻塞
首先,需要注意的是,真正阻塞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中文網其他相關文章!