Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menyelesaikan \'sendResponse tidak menunggu fungsi async atau Promise\'s resolve\' dalam `chrome.tabs.sendMessage` Chrome?
Menyelesaikan masalah "sendResponse tidak menunggu fungsi async atau janji Janji"
Isu:
Chrome Chrome. Fungsi sendResponse tabs.sendMessage tidak menunggu asynchronous fungsi atau resolusi Janji.
Analisis Masalah:
Dalam kod yang disediakan, fungsi getThumbnails dalam skrip kandungan (contentscript.js) ialah fungsi tak segerak yang memerlukan masa untuk melaksanakan. Walau bagaimanapun, fungsi sendResponse dalam pendengar onMessage digunakan serta-merta, berkemungkinan sebelum getThumbnails menyelesaikan pelaksanaannya. Ini membawa kepada sendResponse mengembalikan tidak ditentukan atau batal sebagai balasan.
Penyelesaian 1: Alih Keluar Kata Kunci Async dan Isytiharkan Fungsi Async Berasingan
Penyelesaian 2: Menampal API untuk Pendengar Async
Pelaksanaan dalam Contentscript.js:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.message === "get_thumbnails") { getThumbnails().then(payload => { sendResponse({ payload }); return true; // Keep messaging channel open for sendResponse }); } }); async function getThumbnails() { // Your code to retrieve thumbnails }
Pelaksanaan dengan Tampalan:
// Patch to allow async/Promise listener if ('crbug.com/1185241') { // Replace with Chrome version check const { onMessage } = chrome.runtime; 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); }); } chrome.runtime.onMessage.addListener(async msg => { if (msg === 'foo') { const res = await fetch('https://foo/bar'); const payload = await res.text(); return { payload }; } });
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \'sendResponse tidak menunggu fungsi async atau Promise\'s resolve\' dalam `chrome.tabs.sendMessage` Chrome?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!