javascript函数运行乱序

时间:2014-02-04 22:42:13

标签: javascript google-chrome-extension message anonymous-function

在Chrome扩展程序中,我尝试从选项页面获取已保存的信息,并在内容脚本中使用它。我正在向后台脚本传递消息以获取它。我已经在一个临时函数中包含了内容脚本中的sendMessage(我认为这就是它的名称),以便我可以将颜色存储在它之外。不幸的是,它会导致事情无序发生。以下代码的输出是:

  

3red

     

1red

     

2blue

我认为这有一些事情要处理我创建了一个临时函数的事实。

Content_script.js:

    (function(){
        chrome.runtime.sendMessage({method: "getLocalStorage", key: "favColor"},
             function(response) {
                 console.log("1"+color);
                 color = response.data;
                 console.log("2"+color);
             }
        )
     })(color);

console.log("3"+color);
a.style.backgroundColor = color;

Background.js:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getLocalStorage")
      sendResponse({data: localStorage[request.key]});
    else
      sendResponse({}); // snub them.
});

1 个答案:

答案 0 :(得分:2)

这里的问题是chrome运行时是异步运行的。因此,当您执行第一个函数时,它将不会记录这些1和2消息,直到发送响应为止。它注册回调并继续执行脚本的其余部分。由于运行时需要一点时间来响应,即使它可能很快,它也不会收到消息,直到它已经记录3到控制台。