js,对象's状态监视

js, object's state monitoring

本文关键字:状态 监视 对象 js      更新时间:2023-09-26

有时在服务器上,当对象被另一段代码更改时,我会遇到需要从对象中获取一些数据的情况。在对象查看过程中保持最新的对象状态非常重要。我通过这样的代码解决了这个问题:

var Obj1={}
Obj1.actual=false;
//asynk part that modifies object
function modify_func(){
    Obj1.actual=false;
    //modifying operations
    Obj1.actual=true;
}
//asynk part that gets object state
function view_func(){
    if(Obj1.actual){
        //operations
            ...
        return;
    }
    //if not actual
    var timer=setInterval(function(){
        if(Obj1.actual){
            //operations
            ...
            clearInterval(timer)
        }
    },1000)
}

这两个功能可以在任何时间被唤醒。然而,我并不认为使用setInterval和reality字段是个好主意。这个问题有更好的解决方案吗?

您可以在这种情况下使用Promise。它的结构取决于您的实际用例。

设置可能如下所示:

Obj1 = {};
//async part that modifies object
function modify_func() {
  //at this point you might need to check if modifying is already in progress.
  Obj1._modifying = new Promise(function(resolve, reject) {
    //modifying operations
    delete Obj1._modifying;
    resolve();
  });
}
function view_func() {
  if (Obj1._modifying) {
    Obj1._modifying.then(_view_fun_internal);
  } else {
    _view_fun_internal();
  }
}
function _view_fun_internal() {
  //do some stuff on the ready object
}

但值得庆幸的是,只有在_view_fun_internal中的数据收集是同步的情况下,这才会很好地工作。