我是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;
答案 0 :(得分:0)
该函数在回调将值存储在isRegistered
之前返回。 chrome.storage.local.get函数是异步的。
您可以通过创建自己的回调函数来解决此问题。
function getTrueFalse(callback) {
// do stuff
callback(true|false);
});
getTrueFalse(function(v) {
console.log('return value ', v);
});
&#13;
这是异步函数的工作方式,但是,在您的示例中,不需要@idrumgood指出的。
答案 1 :(得分:0)
这两个函数都在访问本地存储,我不知道为什么。您的注册流程应该是:
function registrationFlow() {
var found = getTrueFalse();
if(found) {
//do something
}
else {
//do something else
}
}