使用异步,等待,承诺未定义响应

问题描述 投票:0回答:1

在我的eventPage.js中(背景,持续时间为false):

chrome.runtime.onMessage.addListener(async function(request, sender, sendResponse) {

    await new Promise((resolve, reject) => { 
        chrome.downloads.search({id: files[i]}, function (item) { 
            sendfiles.push(item[0].id);
            resolve();
        });
    });

    console.log(sendfiles); // contains (item[0].id), means it did wait.

    sendResponse("hello"); // Should send hello back

    return true;
});

在我的popup.js中:

chrome.runtime.sendMessage("",(response) => {
    alert(response); // alerts undefinded instead of hello
});

我的错误:Unchecked runtime.lastError: The message port closed before a response was received.

如代码注释中所述,它应该以popup.js响应"hello"的请求,但是由于它在Promise中等待,所以我得到了错误,并且response变成了undefinded在我可以sendResponse我的"hello"之前(我想这是正在发生的事情。)

在我的eventPage.js(background,persistent = false)中:chrome.runtime.onMessage.addListener(异步函数(request,sender,sendResponse){等待新的Promise((resolve,reject)=> {...

javascript google-chrome-extension promise async-await chrome-extension-async
1个回答
1
投票

除非事件侦听器返回,否则此函数将变为无效,除非您从事件侦听器返回true表示您希望异步发送响应(这将使消息通道向另一端开放,直到调用sendResponse为止。]]

© www.soinside.com 2019 - 2024. All rights reserved.