82 votes

Comment faire pour qu'un programme attende un changement de variable dans javascript ?

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..

98voto

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();

3voto

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();
    };
 };

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X