Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menggunakan Async/Await untuk Menjeda Pelaksanaan untuk Panggilan Balik dalam JavaScript?
Menggunakan Async/Await to Jeda Pelaksanaan untuk Panggilan Balik
Apabila berurusan dengan panggilan balik, adalah wajar untuk menjeda pelaksanaan fungsi sehingga panggilan balik telah mengembalikan nilai. Dalam pengaturcaraan segerak, ini boleh dicapai dengan mekanisme menyekat seperti join(). Walau bagaimanapun, dalam pengaturcaraan asynchronous, ini selalunya tidak diingini.
Andaikan anda mempunyai fungsi panggil balik yang menjamin untuk dipanggil tepat sekali dan anda ingin mengubah suai fungsi berikut untuk menggunakan async/wait:
test() { api.on( 'someEvent', function( response ) { return response; }); }
Matlamatnya adalah untuk menukarnya kepada fungsi tak segerak yang menunggu pelaksanaan panggilan balik, seperti ini:
async test() { return await api.on( 'someEvent' ); }
Async/menunggu sahaja tidak boleh mencapai ini, kerana ia memerlukan Janji untuk dikembalikan melalui api .on(). Untuk membetulkannya, kita boleh membungkus panggilan balik dalam fungsi Promise-returning:
function apiOn(event) { return new Promise(resolve => { api.on(event, response => resolve(response)); }); }
Sekarang, kita boleh menulis semula test() sebagai fungsi tak segerak:
async function test() { return await apiOn( 'someEvent' ); // await is optional here (returns a Promise) }
Perhatikan bahawa async fungsi juga mengembalikan Janji sendiri. Untuk mendapatkan hasil sebenar daripada test(), ia perlu ditunggu dalam fungsi async luar:
async function whatever() { const response = await test(); // use response here }
Dengan memanfaatkan fungsi Promise-wrapping, kita boleh menggunakan async/waiit untuk menjeda pelaksanaan test() sehingga panggilan balik telah mengembalikan nilai.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Async/Await untuk Menjeda Pelaksanaan untuk Panggilan Balik dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!