2

しばらくこの応答変数にアクセスしようとしていて、クロージャーやスコープを十分に理解していないと思うので、私は愚かだと感じています。助けてください。

私はクロム拡張に取り組んでおり、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() を実際に実装したいと思います...不可能ですか? 私はオープン ソース ライブラリにもオープンです。

4

1 に答える 1

5

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);
于 2013-07-10T14:58:16.750 に答える