Heim >Web-Frontend >js-Tutorial >Wie kann das Problem behoben werden, dass „sendResponse nicht auf die asynchrone Funktion oder die Auflösung von Promise wartet' in „chrome.tabs.sendMessage' von Chrome?
Fehlerbehebung „sendResponse wartet nicht auf asynchrone Funktion oder Promise-Auflösung“
Problem:
Chrome's Chrome. Die sendResponse-Funktion von tabs.sendMessage wartet nicht auf asynchrone Funktionen oder versprochene Lösungen.
Problemanalyse:
Im bereitgestellten Code ist die getThumbnails-Funktion im Inhaltsskript (contentscript.js) eine asynchrone Funktion, deren Ausführung einige Zeit in Anspruch nimmt ausführen. Die sendResponse-Funktion im onMessage-Listener wird jedoch sofort aufgerufen, möglicherweise bevor getThumbnails ihre Ausführung abgeschlossen hat. Dies führt dazu, dass sendResponse als Antwort undefiniert oder null zurückgibt.
Lösung 1: Asynchrones Schlüsselwort entfernen und separate asynchrone Funktion deklarieren
Lösung 2: Patchen der API für den asynchronen Listener
Implementierung in 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 }
Umsetzung mit Patch:
// 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 }; } });
Das obige ist der detaillierte Inhalt vonWie kann das Problem behoben werden, dass „sendResponse nicht auf die asynchrone Funktion oder die Auflösung von Promise wartet' in „chrome.tabs.sendMessage' von Chrome?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!