关于jquery:当变量设置为X时的Javascript回调

Javascript Callback when variable is set to X

有一个我似乎无法解决的问题。 我想编写一个接受变量和回调的通用javascript函数,并继续执行,直到该变量不是false。

例如,变量SpeedFeed.user.sid是假的,直到代码中发生其他事情,但我不想在设置之前执行特定的回调。

电话:

1
2
3
4
SpeedFeed.helper_ready(SpeedFeed.user.sid, function(){
  alert(SpeedFeed.user.sid);
  // Run function that requires sid to be set.
});

功能:

1
2
3
4
5
6
7
8
9
helper_ready: function(vtrue, callback){
  if(vtrue != false){
    callback();
  } else {
    setTimeout(function(){
       SpeedFeed.helper_ready(vtrue, callback);
    }, SpeedFeed.apiCheckTime);
  }
}

我把它缩小到的问题似乎是因为在setTimeout中我调用vtrue而不是实际的SpeedFeed.user.sid,它总是被设置为false。 我意识到我可以为每次只评估SpeedFeed.user.sid编写一个特定的函数,但是我希望有一个可以在整个应用程序中使用的泛型方法。

感谢任何见解:)


除了@Trey的回答,因为我还在考虑settergetter。除了set和get功能之外,我建议添加类似registerListenerunregisterListener的内容,它们会注册监听器以跟随变量的状态。然后每次调用getter迭代所有侦听器并告诉他们更新的值,或者只是将此值传递给它们。


您正在将vtrue的当前值传递给setTimeout,然后重复该过程,因此参数vtrue始终相同(vtrue是不可变的)。

而不是编写类似于回调的函数来检查特定值何时为真,为什么不制作可以调用callback()的setter和getter函数,或者只要vtrue true就直接调用callback()?代码将更容易遵循这种方式,您将不需要诸如setTimeout循环之类的黑客。

这个问题有多种解决方案,不需要回调。一种传统的方法是使用setter和getter而不是赋值。


而不是超时使用setInterval。看到这个问题。它类似于你想要做的事情。


传递给helper_ready三个参数:
source_object,object`s_property,callback

然后检查对象属性的状态。
在你的情况下,它将是

1
2
3
4
SpeedFeed.helper_ready(SpeedFeed.user,"sid", function(){
  alert(SpeedFeed.user.sid);
  // Run function that requires sid to be set.
});

全球财产:

1
2
3
4
SpeedFeed.helper_ready(window,"sid", function(){
  alert(windwo.sid);
  // Run function that requires sid to be set.
});