有时在服务器上我有这样的情况,即当它被另一段代码更改时从对象获取一些数据是必要的。在对象查看期间拥有最新的对象状态非常重要。我用这样的代码解决了这个问题:
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字段是个好主意。 这个问题有更好的解决方案吗?
答案 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
中的数据收集是同步的话,这只会有效。