Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使方法暂停,直到另一个属性准备就绪_Javascript_Javascript Events - Fatal编程技术网

Javascript 使方法暂停,直到另一个属性准备就绪

Javascript 使方法暂停,直到另一个属性准备就绪,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

我有一个用于与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编写一个函数,每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
?这样就不需要在脚本中进行阻塞操作

这可能会有帮助