I'm currently working on a Chrome Extension.
content_script.js
$(document).ready(function(){
    var IPToken;
    function doSomething() {
        chrome.runtime.sendMessage({method: "getToken"}, function(response) {               
            return response.token;
        });
    }
    IPToken = doSomething();
    console.log(IPToken);
background.js
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
       if (request.method == "getToken")
      sendResponse({token: localStorage["IPToken"]});// IPToken is just a string
  });
IPToken is always undefined. As I understand it, this is because the function won't wait for a response? If so, how can I make sure the response has returned before setting IPToken = doSomething() ? 
EDIT: I need the value of response.token further down in another function. This is why I'm trying to store the value in the var IPToken.
UPDATE:
function onComplete(a){ // When the code completes, do this
    console.log(a);// this works, it returns the true result!!
    return a;
}
function getToken(whenDone){            
    setTimeout(function(){
        chrome.runtime.sendMessage({method: "getToken"}, function(response) {           
            whenDone(response.token);
        });
    },10);
}
var IPToken = getToken(onComplete);
console.log("Token is: "+IPToken);// undefined
