js,object&state的状态监控

时间:2016-05-14 14:45:50

标签: javascript node.js

有时在服务器上我有这样的情况,即当它被另一段代码更改时从对象获取一些数据是必要的。在对象查看期间拥有最新的对象状态非常重要。我用这样的代码解决了这个问题:

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和actuality字段是个好主意。 这个问题有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以在这种情况下使用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中的数据收集是同步的话,这只会有效。