呼叫chrome.tabs.query 後,結果似乎無法存取
嘗試存取chrome.tabs.query() 的結果時,開發人員可能會遇到意外行為,結果似乎無法使用。此問題源自於查詢的非同步性質。
在非同步程式設計中,函數在執行的主執行緒之外運行。因此,主循環可能會在非同步函數仍在運行時繼續執行程式碼。
為了說明這一點,請考慮以下範例:
var fourmTabs = new Array(); chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } }); for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } }
在這種情況下,for 迴圈遵循query 將在指派給 tabs.query 的回呼函數完成執行之前執行。因此,查詢結果在循環內尚不可用。
要解決此問題,依賴查詢結果的程式碼應放置在回呼函數內。例如:
var fourmTabs = new Array(); chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } // Code relying on the query results here });
透過將使用查詢結果的程式碼移至回呼函數中,我們確保它僅在結果可用時執行,從而消除了該問題。
以上是為什麼我的“chrome.tabs.query()”結果無法存取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!