Javascript Can';t从chrome.runtime.sendMessage访问响应变量。(结束?)

Javascript Can';t从chrome.runtime.sendMessage访问响应变量。(结束?),javascript,google-chrome-extension,scope,Javascript,Google Chrome Extension,Scope,我觉得自己很愚蠢,因为我尝试访问这个响应变量已经有一段时间了,我想我对闭包或作用域的理解还不够透彻,所以请帮助我 我正在开发一个chrome扩展,我正在将一条消息从contentscript.js发送到background.js并接收响应。现在我想返回响应,并能够在contentscript.js中使用它。看起来你应该能做的事 function getWords(){ var words = []; chrome.runtime.sendMessage({detail: "w

我觉得自己很愚蠢,因为我尝试访问这个响应变量已经有一段时间了,我想我对闭包或作用域的理解还不够透彻,所以请帮助我

我正在开发一个chrome扩展,我正在将一条消息从contentscript.js发送到background.js并接收响应。现在我想返回响应,并能够在contentscript.js中使用它。看起来你应该能做的事

function getWords(){

    var words = [];

    chrome.runtime.sendMessage({detail: "words"}, function(response) {
        console.log(response) // prints ["word1, "word2" ..]
        words = response;
    });

 return words; // = []
}
更新: 谢谢,我知道我现在的问题是什么,但仍然想得到一些建议来解决它。 我的问题是,如果我需要在另一个函数中立即将单词列表作为参数,“询问”背景页面的最佳方式是什么。我能等信息回来吗?我应该直接从回调调用另一个函数吗?还是有其他方法?
理想情况下,我希望实际实现一个getWords(),它在列表返回之前不会返回。。。不可能的?我也对开源库持开放态度

因为
sendMessage
是一个异步调用,您将其视为同步调用。你正在试着在打电话之前读单词。没有办法等待它。您需要使用回调

function getWords( callback ){

    var words = [];

    chrome.runtime.sendMessage({detail: "words"}, function(response) {
        console.log(response) // prints ["word1, "word2" ..]
        callback(response);
    });

}



function processWords(words){
    //do your logic in here
    console.log(words);
}
getWords(processWords);

请参阅Chrome扩展文档。当你看完后仍然不理解这个概念时,告诉我,然后我会给你举另一个例子。谢谢你的回答。这让我明白了问题所在,但并没有真正帮助我找到我正在寻找的解决方案。我想我的问题是,如果我需要一个单词列表作为另一个函数的参数,那么最好的方法是什么。我可以等待信息返回吗?我应该直接从回调中调用另一个函数,还是有其他方法?除非api有强制同步调用的方法,否则我怀疑您是否能够做您想做的事情。我可能会经常得到这个列表。最好使用chrome.storage或其他通信方式?