JavaScript中的回调函数是如何工作的
How do Callback functions in JavaScript work
我是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所指出的。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)