等待回呼解析
使用簡單回呼的場景,如下例:
test() { api.on( 'someEvent', function( response ) { return response; }); }
將此函數轉換為使用async/await 需要稍作修改。假設「someEvent」保證只被呼叫一次,「test」函數可以轉換成一個等待回調執行的非同步函數:
async test() { return await api.on( 'someEvent' ); }
但是,async/await本身並沒有能力直接處理回調。為了彌補這一差距,必須重新設計 api.on() 以返回 Promise。這是一個範例:
function apiOn(event) { return new Promise(resolve => { api.on(event, response => resolve(response)); }); }
經過此修改,「測試」函數現在可以編寫為:
async function test() { return await apiOn( 'someEvent' ); }
請注意,在此上下文中,await 關鍵字本質上是可選的,因為任何一種方法仍然會導致返回Promise。
最後,重要的是要記住非同步函數本身會傳回 Promise。因此,直接存取“test()”傳回的值是不可能的。相反,需要處理返回的 Promise:
async function whatever() { // snip const response = await test(); // use response here // snip }
以上是如何在 JavaScript 中使用帶有回呼的非同步/等待?的詳細內容。更多資訊請關注PHP中文網其他相關文章!