Je veux forcer un programme JavaScript à attendre dans certains points particuliers de son exécution jusqu'à ce qu'une variable ait changé. Y a-t-il un moyen de le faire ? J'ai déjà trouvé une extension qui s'appelle "narrative JavaScript" qui force le programme à attendre qu'un événement se produise. Existe-t-il un moyen de créer un nouvel événement, un « événement de changement de variable » par exemple qui se comporte comme un événement onclick..
Réponses
Trop de publicités?
aularon
Points
6305
Modifier 2018 : S'il vous plaît regarder dans Object getters et setters et Proxies. Ancienne réponse ci-dessous :
une solution simple et rapide se présente comme suit :
var something=999;
var something_cachedValue=something;
function doStuff() {
if(something===something_cachedValue) {//we want it to match
setTimeout(doStuff, 50);//wait 50 millisecnds then recheck
return;
}
something_cachedValue=something;
//real action
}
doStuff();
JakeJ
Points
553
Ce qui a fonctionné pour moi (j'ai regardé partout et j'ai fini par utiliser le jsfiddler de quelqu'un/le modifiant très légèrement - ça a bien fonctionné), c'était de régler cette variable sur un objet avec un getter et un setter, et le setter déclenche la fonction qui attend un changement de variable.
var myVariableImWaitingOn = function (methodNameToTriggerWhenChanged){
triggerVar = this;
triggerVar.val = '';
triggerVar.onChange = methodNameToTriggerWhenChanged;
this.SetValue(value){
if (value != 'undefined' && value != ''){
triggerVar.val = value; //modify this according to what you're passing in -
//like a loop if an array that's only available for a short time, etc
triggerVar.onChange(); //could also pass the val to the waiting function here
//or the waiting function can just call myVariableImWaitingOn.GetValue()
}
};
this.GetValue(){
return triggerVar.val();
};
};