"sendResponse가 비동기 기능 또는 Promise의 해결을 기다리지 않음" 문제 해결
문제:
Chrome의 chrome. tabs.sendMessage의 sendResponse 함수는 다음을 기다리지 않습니다. 비동기 함수 또는 Promise 해결.
문제 분석:
제공된 코드에서 콘텐츠 스크립트(contentscript.js) 내의 getThumbnails 함수는 다음을 수행하는 비동기 함수입니다. 실행할 시간. 그러나 onMessage 리스너의 sendResponse 함수는 getThumbnails가 실행을 완료하기 전에 즉시 호출됩니다. 이로 인해 sendResponse가 응답으로 정의되지 않거나 null을 반환하게 됩니다.
해결책 1: 비동기 키워드를 제거하고 별도의 비동기 함수 선언
해결책 2: 비동기 리스너용 API 패치
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 }
구현 패치:
// 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 }; } });
위 내용은 Chrome의 `chrome.tabs.sendMessage`에서 \'sendResponse가 비동기 기능 또는 Promise\의 해결을 기다리지 않음\'을 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!