2011-08-24 21 views
0

我有一個Chrome擴展,帶有執行的JavaScript文件。 JavaScript文件,使這個電話轉給background.html:在這個javascript中發生了什麼,我該如何解決它?

action.js

var action = ""; 
chrome.extension.sendRequest({method: "getLocalStorage", key: "action"}, 
    function(response) { 
    alert(response.data); 
    action = response.data; 
}); 
alert('action:'+action); 

background.html:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
if (request.method == "getLocalStorage") 
    sendResponse({data: localStorage[request.key]}); 
else 
    sendResponse({}); 

我得到的行爲是一個警告方框上寫着「action:」,然後是一個警告框,上面寫着「video」,這是正確的行動值。

爲什麼這些警報框顯示失靈,爲什麼不變量action獲得response.data價值?這是否與sendRequest方法延遲有關?我如何讓腳本等待,以便我可以獲得價值? (我需要多次執行此請求 - 我有4個值,我需要請求)

+0

*「我該如何讓腳本等待......」*您不希望它等待。你需要的是適應你的代碼來處理異步執行。 – user113716

回答

3

我假設sendRequest是一個異步方法(很像Ajax調用)。該腳本不會停止並等待響應。

唯一的解決辦法是調用其他需要內部回調的函數。

+0

我需要撥打這個電話4次,才能獲得4個值,而且似乎無法批量返回localStorage。如果我把所有東西都放在回調中,我就不能打這個電話4次。 – xdumaine

+0

我沒有看到一個問題來創建一個函數發出請求並調用它四次。或者創建一個隊列。你想要一個接一個地執行這四個調用還是可以同時運行? –

+0

我想調用該函數4次,並且我需要在代碼繼續執行之前返回所有4個值。例如:在我上面的action.js代碼中,我需要在alert('action:'+ action)之前完成請求;',並且我需要它執行4次。 – xdumaine

相關問題