나는 배경 스크립트와 크롬 확장 프로그램을 연결하고 있어요. 간단한 동기 호출의 경우 제대로 작동합니다. 나는 메시지를 보내고 응답을 받는다.사용 onMessage.addListener의 sendResponse 비동기
내부적으로 Dexie 약속과 함께 IndexedDB를 사용하는 getValue
은 단순한 sendResponse
을 사용할 수 없습니다. 나는 이것을 처리하는 방법이 메시지를 응답으로 보내는 것임을 알았다. 그러나 나를 위해, 그것은 실제로 이해가되지 않습니다. 백그라운드 스크립트는 특정 키 값을 데이터베이스에서 찾을 수 있는지 여부를 단순히 확인합니다. 확장 기능은 키 값이 반환 될 때까지 차단되어야합니다.
나는이 어떻게 든 sendResponse
를 사용하는 풀다 수 있을까요? 아마도 return findData()
을 동기 함수로 감싸고 있을까요?
chrome.runtime.sendMessage({
request:'getValue',
key: shortcutKey
}, (data) => {
debugLog('getShortcut:', data);
let value = data.value;
console.log(`for key: ${key} found ${value}`);
...
do_my_thing();
});
배경 스크립트 :
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
switch (request.name) {
case 'getClipboard':
sendResponse({clipboard:getClipboard()});
break;
case 'getValue':
console.log(`background::getValue handler key:`, request.key);
return findData(request.key.substring(constants.PREFIX.length)).then((result) => {
console.log(`findData return: ${result}`);
sendResponse({ value: result });
});
break;
...
}
});
https://developer.chrome.com/extensions/messaging에서 비동기적인 단락을 읽었습니까? 이 indexDB를 사용 –
경우, 동기화 할 수있는 방법은 없습니다. – dandavis