JavaScript中的Callback函数如何工作

时间:2015-10-05 21:37:59

标签: javascript asynchronous callback

我是javascript回调函数的新手。我花了相当多的时间试图让它发挥作用,但仍然不断下降。我有以下功能。我只想调用registrationFlow()并让它进入if(found)条件,但getTrueFalse()总是返回false。在getTrueFalse()中的isRegistered被设置为true(使用警报看到)。有人可以指出我的问题在哪里吗?非常感谢!



function getTrueFalse() {
    var isRegistered = false;
    var registeredIds = ['APA','BBB'];
    chrome.storage.local.get("registeredId", function (result) {
        id = result["registeredId"];
        for(var i=0; i < registeredIds.length; i++) {
            if(registeredIds[i] === id) {        
                isRegistered = true;
            }
        }
    });  
    return isRegistered;
}

function registrationFlow() {
    chrome.storage.local.get("registered", function(result) {
        if (result["registered"]) {
            var found = getTrueFalse();
            if(found) {
                //do something
            }
        } else {      
            //do something else
        }
    });  
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

该函数在回调将值存储在isRegistered之前返回。 chrome.storage.local.get函数是异步的。

您可以通过创建自己的回调函数来解决此问题。

&#13;
&#13;
function getTrueFalse(callback) {
    // do stuff
    callback(true|false);
});

getTrueFalse(function(v) {
    console.log('return value ', v);
});
&#13;
&#13;
&#13;

这是异步函数的工作方式,但是,在您的示例中,不需要@idrumgood指出的。

答案 1 :(得分:0)

这两个函数都在访问本地存储,我不知道为什么。您的注册流程应该是:

function registrationFlow() {
    var found = getTrueFalse();
    if(found) {
        //do something
    }
    else {      
      //do something else
    }  
}