【问题标题】:Message port closed before a response was received despite return true尽管返回 true,但在收到响应之前消息端口已关闭
【发布时间】:2022-09-27 19:56:28
【问题描述】:

我正在从弹出窗口向后台发送一条消息,当接收到调用外部 API 并从该 api 响应时,我正在向后台发送一条消息以弹出。

弹出

chrome.runtime.sendMessage({
        message: \"submit\",
        payload: {
            transactions: usersTxs,
        }
        }, (response) => { ... do other stuff }

背景

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.message === \'submit\'){
         fetch(\'https://example.com/api/submit\'})
           .then((res) => {
                 sendResponse({ message: true })
                return true
            })
    }

然而,尽管设置 return true 我仍然收到以下错误:

Unchecked runtime.lastError: The message port closed before a response was received
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received

我做错了什么吗?

谢谢

    标签: google-chrome google-chrome-extension


    【解决方案1】:

    您在错误的时间返回 true - 在稍后执行的异步处理程序中。移动您的退货声明:

    chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
        if (request.message === 'submit') {
             fetch('https://example.com/api/submit'})
                 .then((res) => {
                     sendResponse({ message: true })
                 })
             return true
        }
    

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 2018-03-26
      • 2019-07-11
      • 2019-05-23
      • 2020-11-29
      • 2019-08-24
      • 2021-07-25
      • 2022-06-26
      相关资源
      最近更新 更多