JavaScript 中的回调函数如何工作

How do Callback functions in JavaScript work

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

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

回调前的函数returns将值存入isRegistered。函数 chrome.storage.local.get 是异步的。

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

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

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

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

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

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