一只爱算法的猫 2024-01-10 20:23 采纳率: 66.7%
浏览 4
已结题

edge扩展开发中遇到异步调用callback问题

popup.js中有以下代码:

var response = await chrome.runtime.sendMessage({
    ......
 });

background.js中有以下代码:

function onMessage(message, sender, sendResponse) {
    await someAsyncFunction();
    sendResponse(......);
}

chrome.runtime.onMessage.addListener(onMessage);

然后发现popup.js中response的内容是undefined,似乎无法收到sendResponse(......)的内容
是因为onMessage不能async吗?有没有什么办法解决?

  • 写回答

1条回答 默认 最新

  • Leodong. 2024-01-10 21:09
    关注

    以下回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    是的,onMessage函数不能使用async/await。因为当使用async/await时,函数会立即返回一个Promise对象,而不会等待异步操作完成。这意味着在sendResponse(......)执行之前,onMessage函数就已经结束了。

    为了解决这个问题,你可以将sendResponse(......)放在一个回调函数中,然后在someAsyncFunction()完成后调用这个回调函数。这是修改后的代码:

    popup.js:

    var response = await chrome.runtime.sendMessage({
        ......
    });
    

    background.js:

    function onMessage(message, sender, sendResponse) {
        someAsyncFunction().then(() => {
            sendResponse(......);
        });
    }
    
    chrome.runtime.onMessage.addListener(onMessage);
    

    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月22日
  • 已采纳回答 1月14日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 裸板ESD问题的思考与实验
  • ¥15 electron+python
  • ¥50 远程调试PLC的解决方案的问题
  • ¥15 微信收付通中,自动分账的情况下,某一接收方分账失败了系统会自动在发起重新分账吗
  • ¥15 宝塔ssl证书一直待待验证
  • ¥15 相近语义 不同表达 匹配
  • ¥15 [vasp+phonopy]表面模型的间隙扩散系数中尝试频率如何用声子频率计算
  • ¥15 web前端开发怎么实现像图片这样的页面啊?
  • ¥15 ubuntu 20.04 网卡启用后,只有ipv6 没有 ipv4 无法上网
  • ¥15 QT任务管理器无法正确获取展开,有悬赏15元速求,如何解决?(相关搜索:标识符|结构体)