使用Async/Await 暫停回呼的執行
處理回呼時,可能需要暫停函數的執行,直到回呼發生已傳回一個值。在同步編程中,這可以透過像 join() 這樣的阻塞機制來實現。然而,在非同步編程中,這通常是不可取的。
假設你有一個保證只調用一次的回調函數,並且你想修改以下函數以使用async/await:
test() { api.on( 'someEvent', function( response ) { return response; }); }
目標是將其轉換為等待回調執行的非同步函數,如下所示:
async test() { return await api.on( 'someEvent' ); }
單獨使用Async/await 無法實現此目的,因為它需要api 傳回Promise 。在()。為了解決這個問題,我們可以將回調包裝在Promise 返回函數中:
function apiOn(event) { return new Promise(resolve => { api.on(event, response => resolve(response)); }); }
現在,我們可以將test() 重寫為非同步函數:
async function test() { return await apiOn( 'someEvent' ); // await is optional here (returns a Promise) }
注意async函數本身也會回傳Promise。要從test() 獲得實際結果,需要在外部非同步函數中等待:
async function whatever() { const response = await test(); // use response here }
透過利用Promise 包裝函數,我們可以使用async/await 來有效地暫停執行test() 直到回呼返回一個值。
以上是如何在 JavaScript 中使用 Async/Await 暫停回呼的執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!