一只爱算法的猫 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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀