我有一个用于与IndexedDB交互的对象。它有一个属性就绪,在数据库完成打开时更改为2。如何告诉read方法等到this.ready == 2?
var db = {
open: function() {//a callback sets this.ready to 2 when the database has been successfully opened},
ready: 0,
read: function() {
if(!this.ready == 2) {//pause until this.ready == 2}
...
}
}
我应该使用setTimeout编写一个函数来检查this.ready每100毫秒还是有一个更优雅的解决方案?
答案 0 :(得分:0)
通常任何暂停都需要在不同的线程中完成,但我对javascript很新,所以它可能会有所不同。但你也可以尝试让函数返回你需要的任何数据,然后将它输入function2 函数2(功能1())
答案 1 :(得分:0)
超时(实际上,可能是取消自身的间隔)是JavaScript中“等待”某事的唯一好方法。否则,因为只有一个线程,所以最终会阻止浏览器中的所有其他JS执行。另一个选择是当状态变为2时使用调用你的函数(使用回调)。
接近“等待”:
var myWait = setInterval(function () {
if (status == 2) {
clearInterval(myWait);
myFunction();
}
}, 100);
答案 2 :(得分:0)
在对象上使用getter和setter,可以在设置ready时定义自定义回调,然后在/当它设置为2时运行代码 read here
答案 3 :(得分:0)
我同意@ g.d.d.c - 您应该切换逻辑以使用回调。您已经有open
回调(至少根据您的代码示例),那么为什么不在您的read
回调完成后简单地调用open
?然后,您无需在脚本中进行阻止操作。