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