我遇到了异步问题(我相信)。contentscript.js 中的 sendResponse() 不会等待 getThumbnails() 返回。我正在 popup.js 中发送一条消息:chrome.tabs.sendMessage(tab...
我遇到了异步问题(我相信)。 sendResponse()
在 contentscript.js 不会等待 getThumbnails()
返回。
消息 中 发送一条 popup.js :
chrome.tabs.sendMessage(tabs[0].id, {message: "get_thumbnails", tabUrl: tabs[0].url},
function (respThumbnails) {
const thumbUrl = respThumbnails.payload;
console.log("payload", thumbUrl)
}
);
然后,在 contentscript.js 我 监听 以下消息:
chrome.runtime.onMessage.addListener(async function(request,sender,sendResponse) {
if(request.message === "get_thumbnails") {
const payload = await getThumbnails();
console.log("thumbPayload after function:", payload)
sendResponse({payload:payload});
}
});
async function getThumbnails() {
let tUrl = null;
var potentialLocations = [
{sel: "meta[property='og:image:secure_url']", attr: "content" },
{sel: "meta[property='og:image']", attr: "content" },
];
for(s of potentialLocations) {
if(tUrl) return
const el = document.querySelector(s.sel);
if(el) {
tUrl = el.getAttribute(s.attr) || null;
}
}
return tUrl;
};
但问题也可能出在我的 getThumnails()
函数上,因为大多数情况下, payload 为 null 而不是 undefined。所以 getThumbnails()
可能会在完全执行之前返回。如果是这样的话,我不知道为什么……
我也尝试过这个代码 getThubnails()
:
async function getThumbnails() {
let x = await function() {
let tUrl = null;
var potentialLocations = [
{sel: "meta[property='og:image:secure_url']", attr: "content" },
{sel: "meta[property='og:image']", attr: "content" },
];
for(s of potentialLocations) {
if(tUrl) return
const el = document.querySelector(s.sel);
if(el) {
tUrl = el.getAttribute(s.attr) || null;
}
}
return tUrl;
}
return x;
};
但这不起作用,它似乎破坏了我的代码......
sendResponse 不等待异步函数或 Promise 的解析
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!