Javascript 使方法暂停,直到另一个属性准备就绪
我有一个用于与IndexedDB交互的对象。它有一个准备就绪的属性,当数据库完成打开时,该属性将更改为2。如何告诉read方法等待this.ready==2Javascript 使方法暂停,直到另一个属性准备就绪,javascript,javascript-events,Javascript,Javascript Events,我有一个用于与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
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编写一个函数,每100毫秒检查一次。ready,还是有更优雅的解决方案?通常,任何暂停都需要在不同的线程中完成,但我对javascript非常陌生,因此可能会有所不同。但是你也可以尝试让函数返回你需要的任何数据,然后将其输入到函数2中 function2(function1())在JavaScript中,超时(实际上,可能是一个自动取消的间隔)是“等待”某件事情的唯一好方法。否则,因为只有一个线程,所以最终会阻止浏览器中所有其他JS的执行。另一个选项是,当状态变为2时,让某个东西调用您的函数(使用回调) “等待”是这样处理的:
var myWait = setInterval(function () {
if (status == 2) {
clearInterval(myWait);
myFunction();
}
}, 100);
使用对象上的getter和setter,可以在设置就绪时定义自定义回调,然后在设置为2时运行代码
我同意@g.d.d.c-你应该改变你的逻辑来使用回调。您已经有了一个
open
回调(至少根据您的代码示例),那么为什么不在open
回调完成时简单地调用read
?这样就不需要在脚本中进行阻塞操作 这可能会有帮助