gpt4 book ai didi

javascript - 为 JavaScript 变量赋值时出现问题

转载 作者:行者123 更新时间:2023-11-30 10:48:24 24 4
gpt4 key购买 nike

我正在尝试在 Firefox 5.0 中执行以下操作:

var db;
var request = mozIndexedDB.open("MyTestDatabase");
request.onerror = function(event) {
alert("Why didn't you allow my web app to use IndexedDB?!");
};
request.onsuccess = function(event) {
db = request.result;
//db = event.target.result; //also tried this
console.log(db); //get the object
};

console.log(db); //undefined

我想要数据库,可以在处理程序之外访问。这里的问题是什么?我正在尝试从 this 中学习一些东西.

一定有一件我想念的简单的事情..

最佳答案

您的 db 变量在成功处理程序中分配了一个值:

request.onsuccess = function(event) {
db = request.result;
//db = event.target.result; //also tried this
console.log(db); //get the object
};

该处理程序将被异步调用,特别是,当您执行此操作时它尚未被调用:

console.log(db); //undefined

因此您最终得到了从 var db; 获得的 db 的初始值。

因此,您可以在回调之外访问 db,但它不一定会在您需要时具有有用的值。通常的方法是在成功处理程序中调用需要 db 的东西。如果您需要在其他地方使用 db,您必须在使用它之前检查是否已定义,如果没有定义则等待。

如果您需要等待 db 准备就绪后再继续您的应用程序,那么这样的事情应该可行:

var timer = setInterval(function() {
if(!db) // Not ready yet.
return;
// We have a db so we can stop waiting
clearInterval(timer);
// and get on with our real work.
start_main_application();
}, 100);

setInterval每 0.1 秒触发一次并检查是否有 db ;如果不是,那么在下一次触发间隔之前它什么都不做;如果有 db,那么它是 shuts down the timer并启动主应用程序。

关于javascript - 为 JavaScript 变量赋值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6978808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com