javascript - 处理异步回调

标签 javascript asynchronous callback

我有以下功能:

    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;
}

检查 Google Chrome 中的标签之一是否是 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;
}

该函数永远不会返回,但如果我使用 alert() 并暂停该函数一瞬间,我将获得正确的返回值。 如何在不使用此 alert() 的情况下返回正确的值?

最佳答案

你有没有想过像这样使用回调函数

fbOpenResponse(isOpened){
    // do stuff
}

当你找到(或没有)fb 窗口时调用...

它很有用。

关于javascript - 处理异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6822344/

相关文章:

java - Android - 如何监听蓝牙输出流被清空

Node.js for 循环内的 for 循环

javascript - jQuery+ajax jquery-1.11.3.min.js :5 XMLHttpRequest cannot load

sockets - 将 SSL Stream 与异步 System.Net.Sockets 结合使用

c++ - 将参数作为参数的回调函数传递给其他函数

javascript - 遍历包含正则表达式的 javascript 对象变量

javascript - 从谷歌表格中的电报机器人输入数据

Javascript Promise,为什么拒绝未处理?

javascript - 仅在焦点上显示输入中的最后 3 个字符?

android - 将按钮 onClick 传递回主要 Activity 的最佳方式?