我已经阅读了大量的论坛和编辑链接和堆叠溢出的QnA,没有回答问题或清楚地解释它。我已经做了2-3天了,就在这个异步等待承诺bs上。
我有一个调用chrome.tabs.sendMessage的异步弹出函数,如下所示,它非常非常基本。我发了个信息,等着回复。维奥拉搞定了。
我对回调函数的理解告诉我,chrome.tabs.sendMessage 将等待响应,然后运行函数,但是函数运行会发生什么呢?我也搞不懂。它只是尽快地运行接收到的文件,而不等待内容脚本完成。那么回调函数的意义是什么呢?
我尝试过在发送之前添加“等待”,然后等待回调函数,以及任何可能的方式,但是它不起作用。我不明白。程序不需要等待就能运行。
我读过这不起作用。而这没有任何意义。承诺等待一条“完整”的信息,不知怎么的,这使它等待。但是tabs.message回调函数也在等待响应,但仍然在运行,什么都不等待吗?
document.addEventListener('DOMContentLoaded', async function() {
console.log('got tabs id');
tab = await getCurrentTab();
console.log('Active tab ' + tab.id);
console.log('Sending Message to Content');
chrome.tabs.sendMessage(tab.id, {action: "getDOM"},function (ret) {
console.log('Receiving Message from Content');
try {
if (!ret.incident.length) return;
globalThis.response = ret;
processResponse(response);
}
catch(err) {
console.log('doing nothing, bad return data')
window.close;
return;
}
});
return;
}); 发布于 2021-10-23 03:51:07
很明显OP很困惑。回调、异步/等待、承诺是一回事,只是写得不一样。下面是只使用允诺更新的代码,以及绝对必要时的回调。在这种情况下,chrome的tabs.sendMessage不会像火狐一样返回承诺。所以它必须使用回调表单。在本例中,content_script对sendResponse执行超时,并且工作正常。
document.addEventListener('DOMContentLoaded', function() {
console.log('got tabs id');
let queryOptions = {active: true, currentWindow: true};
chrome.tabs.query(queryOptions)
.then((tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {action: "getDOM"}, (response) => {
console.log(response);
// processResponse(response);
});
})
.catch((err) => {
console.log(err);
window.close();
return;
});
}); https://stackoverflow.com/questions/69679972
复制相似问题