在回调中调用异步函数

时间:2014-03-27 18:26:28

标签: javascript asynchronous google-chrome-extension

我在background.js中有这段代码:

chrome.extension.onMessage.addListener( function(request,sender,sendResponse){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
        var requests = getTabRequests(tabs[0].id);
                //getTabRequests gets all the information i stored about a tab
        sendResponse( {requests: requests});
    });
 });

我想要它做的是响应popup.js。 chrome.tabs.query让我无法理解。我意识到这是一个异步函数,但如何修复它?或者是唯一不发送响应的可能性,而是另一个不同方向的消息(这意味着我无法在mu popup.js中使用回调函数)

1 个答案:

答案 0 :(得分:7)

阅读chrome.runtime.onMessage的文档:

  

function sendResponse
  有响应时调用(最多一次)的函数。参数应该是任何可以使用JSON的对象。如果同一文档中有多个onMessage侦听器,则只有一个可以发送响应。 当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到调用sendResponse )。

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
        var requests = getTabRequests(tabs[0].id);
        //getTabRequests gets all the information i stored about a tab
        sendResponse({requests: requests});
    });
    return true; // <-- Required if you want to use sendResponse asynchronously!
 });

chrome.extension.onMessage已弃用,请改用chrome.runtime.onMessage,前者是后者的别名。)