sendResponse Menunggu Fungsi Async dan Promise Menyelesaikan
Masalah: Dalam sambungan Chrome, sendResponse() dalam skrip kandungan .js tidak berhenti seketika untuk getThumbnails() ke selesai.
Penjelasan: Pendengar acara chrome.runtime.onMessage Chrome mengembalikan nilai boolean untuk menunjukkan sama ada saluran harus dibuka untuk sendResponse. Apabila fungsi async atau Promise dikembalikan, Chrome mengabaikan Promise dan menutup saluran serta-merta.
Penyelesaian: Jadikan pendengar acara serasi dengan fungsi async:
Contoh:
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { if (msg.message === "get_thumbnails") { processMessage(msg).then(sendResponse); return true; // Keep the channel open for sendResponse } }); async function processMessage(msg) { console.log('Processing message', msg); // ... Handle the message processing here ... return 'foo'; }
Penyelesaian Alternatif: Tampal API
Tambahkan kod berikut pada permulaan setiap skrip yang digunakan chrome.runtime.onMessage:
if ('crbug.com/1185241') { // Replace with a check for Chrome version that fixes the bug const {onMessage} = chrome.runtime, {addListener} = onMessage; onMessage.addListener = fn => addListener.call(onMessage, (msg, sender, respond) => { const res = fn(msg, sender, respond); if (res instanceof Promise) return !!res.then(respond, console.error); if (res !== undefined) respond(res); }); }
Tampung ini membenarkan pendengar acara mengembalikan fungsi async atau Promise.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat `sendResponse` Tunggu Fungsi Async dalam Sambungan Chrome?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!