我有以下功能:處理異步回調
function IsFacebookOpen() {
var url;
var facebookFound = false;
chrome.windows.getAll({"populate":true}, function(getInfo) {
for(var j = 0; typeof getInfo[j] != "undefined"; j++) {
for(var i = 0; typeof getInfo[j].tabs[i] != "undefined"; i++) {
url = getInfo[j].tabs[i].url;
if(url.substr(url.indexOf("facebook", 0), url.indexOf(".com", 0)-url.indexOf("facebook", 0)) == "facebook") {
facebookFound = true;
}
}
}
});
return facebookFound;
}
來檢查,如果谷歌瀏覽器的標籤之一就是Facebook。問題是chromewindows.getAll是異步的,所以在所有選項卡都可以被檢查之前,函數會返回。這意味着返回值始終爲FALSE,因爲在返回之前沒有選中選項卡。如果我強迫的功能做等待以下內容:
function IsFacebookOpen() {
var url;
var facebookFound = false;
var done = false;
chrome.windows.getAll({"populate":true}, function(getInfo) {
for(var j = 0; typeof getInfo[j] != "undefined"; j++) {
for(var i = 0; typeof getInfo[j].tabs[i] != "undefined"; i++) {
url = getInfo[j].tabs[i].url;
if(url.substr(url.indexOf("facebook", 0), url.indexOf(".com", 0)-url.indexOf("facebook", 0)) == "facebook") {
facebookFound = true;
done = true;
}
}
}
done = true;
});
while(!done) { };
return facebookFound;
}
函數永遠不會返回,但如果我用一個警報()和暫停功能的一瞬間,我得到正確的返回值。 如何在不使用此警報()的情況下返回正確的值?