How to avoid “The message port closed before a response was received” error when using await in the...





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







2















I am writing a chrome extension with node module "chrome-extension-async" and meeting a problem when use await in the listener of background.



The content.js which will be injected into the page will send a message to the background, asking it to do some IO operations which is async:



// content.js
const package = await chrome.runtime.sendMessage({param: ...})
console.log(package)

// background.js
chrome.runtime.onMessage.addListener(async (request, sender,
sendResponse) => {
const value = await doIOOperation();
sendResponse(value);
})


However, chrome will report errors like below:




Uncaught (in promise) Error: The message port closed before a response was received.




I think there must be some conflict when using async/await in the listener, Anyone know how to solve this problem?










share|improve this question























  • I think you need to add return true just like with the classic callback version, but the listener can't be async - you'll have to put the async code into IIFE or another function. I also think the WebExtension polyfill is better and BTW it correctly handles this case.

    – wOxxOm
    Jan 3 at 7:04













  • @wOxxOm sendResponse is planned to be phased out from the W3C draft. And it is to be replaced by returning a Promise. I'm assuming this is now happening on Chrome, with some users reporting that this issue is happening on Chrome 71. developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…

    – tom_mai78101
    Jan 11 at 14:20











  • @tom_mai78101, nope, W3C is not related to Chrome API, which is not Promise-based. The OP simply uses a promisifier library, which apparently confused you.

    – wOxxOm
    Jan 11 at 14:40











  • @wOxxOm Ahh, sorry my mistake. Thanks for the clarification.

    – tom_mai78101
    Jan 11 at 15:08


















2















I am writing a chrome extension with node module "chrome-extension-async" and meeting a problem when use await in the listener of background.



The content.js which will be injected into the page will send a message to the background, asking it to do some IO operations which is async:



// content.js
const package = await chrome.runtime.sendMessage({param: ...})
console.log(package)

// background.js
chrome.runtime.onMessage.addListener(async (request, sender,
sendResponse) => {
const value = await doIOOperation();
sendResponse(value);
})


However, chrome will report errors like below:




Uncaught (in promise) Error: The message port closed before a response was received.




I think there must be some conflict when using async/await in the listener, Anyone know how to solve this problem?










share|improve this question























  • I think you need to add return true just like with the classic callback version, but the listener can't be async - you'll have to put the async code into IIFE or another function. I also think the WebExtension polyfill is better and BTW it correctly handles this case.

    – wOxxOm
    Jan 3 at 7:04













  • @wOxxOm sendResponse is planned to be phased out from the W3C draft. And it is to be replaced by returning a Promise. I'm assuming this is now happening on Chrome, with some users reporting that this issue is happening on Chrome 71. developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…

    – tom_mai78101
    Jan 11 at 14:20











  • @tom_mai78101, nope, W3C is not related to Chrome API, which is not Promise-based. The OP simply uses a promisifier library, which apparently confused you.

    – wOxxOm
    Jan 11 at 14:40











  • @wOxxOm Ahh, sorry my mistake. Thanks for the clarification.

    – tom_mai78101
    Jan 11 at 15:08














2












2








2








I am writing a chrome extension with node module "chrome-extension-async" and meeting a problem when use await in the listener of background.



The content.js which will be injected into the page will send a message to the background, asking it to do some IO operations which is async:



// content.js
const package = await chrome.runtime.sendMessage({param: ...})
console.log(package)

// background.js
chrome.runtime.onMessage.addListener(async (request, sender,
sendResponse) => {
const value = await doIOOperation();
sendResponse(value);
})


However, chrome will report errors like below:




Uncaught (in promise) Error: The message port closed before a response was received.




I think there must be some conflict when using async/await in the listener, Anyone know how to solve this problem?










share|improve this question














I am writing a chrome extension with node module "chrome-extension-async" and meeting a problem when use await in the listener of background.



The content.js which will be injected into the page will send a message to the background, asking it to do some IO operations which is async:



// content.js
const package = await chrome.runtime.sendMessage({param: ...})
console.log(package)

// background.js
chrome.runtime.onMessage.addListener(async (request, sender,
sendResponse) => {
const value = await doIOOperation();
sendResponse(value);
})


However, chrome will report errors like below:




Uncaught (in promise) Error: The message port closed before a response was received.




I think there must be some conflict when using async/await in the listener, Anyone know how to solve this problem?







google-chrome-extension chrome-extension-async






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 3 at 6:12









Kyle HuKyle Hu

113




113













  • I think you need to add return true just like with the classic callback version, but the listener can't be async - you'll have to put the async code into IIFE or another function. I also think the WebExtension polyfill is better and BTW it correctly handles this case.

    – wOxxOm
    Jan 3 at 7:04













  • @wOxxOm sendResponse is planned to be phased out from the W3C draft. And it is to be replaced by returning a Promise. I'm assuming this is now happening on Chrome, with some users reporting that this issue is happening on Chrome 71. developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…

    – tom_mai78101
    Jan 11 at 14:20











  • @tom_mai78101, nope, W3C is not related to Chrome API, which is not Promise-based. The OP simply uses a promisifier library, which apparently confused you.

    – wOxxOm
    Jan 11 at 14:40











  • @wOxxOm Ahh, sorry my mistake. Thanks for the clarification.

    – tom_mai78101
    Jan 11 at 15:08



















  • I think you need to add return true just like with the classic callback version, but the listener can't be async - you'll have to put the async code into IIFE or another function. I also think the WebExtension polyfill is better and BTW it correctly handles this case.

    – wOxxOm
    Jan 3 at 7:04













  • @wOxxOm sendResponse is planned to be phased out from the W3C draft. And it is to be replaced by returning a Promise. I'm assuming this is now happening on Chrome, with some users reporting that this issue is happening on Chrome 71. developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…

    – tom_mai78101
    Jan 11 at 14:20











  • @tom_mai78101, nope, W3C is not related to Chrome API, which is not Promise-based. The OP simply uses a promisifier library, which apparently confused you.

    – wOxxOm
    Jan 11 at 14:40











  • @wOxxOm Ahh, sorry my mistake. Thanks for the clarification.

    – tom_mai78101
    Jan 11 at 15:08

















I think you need to add return true just like with the classic callback version, but the listener can't be async - you'll have to put the async code into IIFE or another function. I also think the WebExtension polyfill is better and BTW it correctly handles this case.

– wOxxOm
Jan 3 at 7:04







I think you need to add return true just like with the classic callback version, but the listener can't be async - you'll have to put the async code into IIFE or another function. I also think the WebExtension polyfill is better and BTW it correctly handles this case.

– wOxxOm
Jan 3 at 7:04















@wOxxOm sendResponse is planned to be phased out from the W3C draft. And it is to be replaced by returning a Promise. I'm assuming this is now happening on Chrome, with some users reporting that this issue is happening on Chrome 71. developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…

– tom_mai78101
Jan 11 at 14:20





@wOxxOm sendResponse is planned to be phased out from the W3C draft. And it is to be replaced by returning a Promise. I'm assuming this is now happening on Chrome, with some users reporting that this issue is happening on Chrome 71. developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…

– tom_mai78101
Jan 11 at 14:20













@tom_mai78101, nope, W3C is not related to Chrome API, which is not Promise-based. The OP simply uses a promisifier library, which apparently confused you.

– wOxxOm
Jan 11 at 14:40





@tom_mai78101, nope, W3C is not related to Chrome API, which is not Promise-based. The OP simply uses a promisifier library, which apparently confused you.

– wOxxOm
Jan 11 at 14:40













@wOxxOm Ahh, sorry my mistake. Thanks for the clarification.

– tom_mai78101
Jan 11 at 15:08





@wOxxOm Ahh, sorry my mistake. Thanks for the clarification.

– tom_mai78101
Jan 11 at 15:08












0






active

oldest

votes












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54017163%2fhow-to-avoid-the-message-port-closed-before-a-response-was-received-error-when%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54017163%2fhow-to-avoid-the-message-port-closed-before-a-response-was-received-error-when%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

How to fix TextFormField cause rebuild widget in Flutter