JavaScript中的回调函数是如何工作的

How do Callback functions in JavaScript work

本文关键字:工作 何工作 回调 函数 JavaScript      更新时间:2023-09-26

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

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

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

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

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

function getTrueFalse(callback) {
    // do stuff
    callback(true|false);
});
getTrueFalse(function(v) {
    console.log('return value ', v);
});

这就是异步函数的工作方式,然而,在你的例子中,没有必要这样做,正如@idrumgood所指出的。