J'essaie de "cacher" quelques informations en le stockant dans une variable.
Si 2 minutes sont passées, je veux obtenir les valeurs "en direct" (appelez l'URL).
Si 2 minutes ne sont pas passées, je veux obtenir les données de la variable.
Ce que je veux fondamentalement est: p> J'ai essayé de calculer le temps avec des choses comme P> if((currentime + 2) < futuretime)
5 Réponses :
Si vous êtes ouvert pour inclure la 3e Partie Libs, cela pourrait également être très pratique dans d'autres tâches: http://momentjs.com/docs/#/manipulant/add/ p>
De préférence non, le site Web doit être aussi léger que possible, sinon j'aurais utilisé PHP pour cette fonction spécifique.
sans utiliser de 3e parties libs, il suffit d'utiliser date.gettime () et stockez-le comme une variable:
var CachedCall = function (minTime, cbk) { this.cbk = cbk; this.minTime = minTime; }; CachedCall.prototype = { lastRun: null, invoke: function () { if (this.lastRun == null || new Date().getTime() - this.lastRun > this.minTime) { this.cbk(); } this.lastRun = new Date().getTime(); } }; // CachedCall which will invoke function if last invocation // was at least 2000 msec ago var c = new CachedCall(2000, function () { console.log('executed'); }); c.invoke(); // prints 'executed' c.invoke(); // prints nothing c.invoke(); // prints nothing setTimeout(function () {c.invoke();}, 2300); // prints 'executed'
J'ai essayé la première option mais cela me donne toujours le résultat du si et non l'autre après avoir appelé le si la première fois. Le code que je cours est déjà dans une fonction qui générera toute la page.
Je ne suis pas sûr de ce que tu veux dire. Mon code fonctionne comme suit: Chaque appel à onein2min () imprime 'exécuté' à moins que Onein2min () ait été appelé moins de 2 secondes. Est-ce le comportement attendu?
Je ne le mettez pas dans une fonction parce que je devrais alors appeler la fonction juste après sa prise, donc je pourrais aussi l'exécuter instantanément.
L'ensemble point est de déclarer la fonction une fois, puis de l'appeler plusieurs fois.
OK, dans ce cas je vais continuer à regarder. Merci quand même.
Consultez ceci: jsfiddle.net/beppdp/1 Ici ce code fonctionne comme prévu (vous pouvez voir Journaux dans la console JavaScript)
Je l'ai maintenant essayé en appelant la fonction avec une instruction IF, mais elle renvoie toujours true (définie si pour retourner true et revenir false).
J'aurais vraiment besoin de voir plus du code que vous exécutez, car je pense que je ne comprends pas ce que vous essayez de faire.
Si vous voulez faire quelque chose sur une minuterie en JavaScript, vous devriez utiliser SETTimeOut code>
ou seinterval code>
.
Avoir votre code exécuté dans une boucle continue provoquera votre VM du navigateur à crash . p>
Utilisation de Settimeout code> est plutôt facile: p>
setTimeout(function(){
// do everything you want to do
}, 1000*60*2);
Je ne veux pas que mon code fasse quelque chose toutes les 2 minutes. Je veux que mon code exécute un code spécifique si 2 minutes ont passé, sinon cela fera autre chose. Pour clarifier, il ne effectuera que l'instruction IF après qu'un utilisateur a rafraîchi la page. Le code vérifiera alors si 2 minutes ont passé depuis le dernier appel.
@Parrotmaster Comment allez-vous vérifier si 2 minutes sont passées? Est-ce en réaction à l'utilisateur fournissant une entrée? Comme s'ils cliquent sur cette case et deux minutes ont passé, faire X, sinon y?
Exactement, je veux que le code obtienne du contenu d'une URL si 2 minutes se sont passées, sinon obtenez du contenu de la variable.
@Parrotmaster ah. Il y a de meilleures réponses dans cette question que cela.
Vous pouvez faire quelque chose comme ça
Transformer votre algorithme en travail JavaScript, vous pouvez faire quelque chose comme ceci: vous pouvez mettre le bloc espère que cela aide. p> p> si code> bloquer dans une fonction et l'appelez à tout moment Voulez-vous obtenir les informations de la variable ou de l'URL: p>
Merci, mais cela appelle toujours le si et non l'autre après 2 minutes.
Désolé mon mauvais. La variable code> code> doit être initialement 0 code>. Réponse modifiée.
Cela fonctionne presque exactement comme je le voulais. La première fois qu'elle appelle l'URL "en direct" et après cela n'appelle que le cache. Cependant, après 2 minutes (ou 1 à des fins de test), il n'appelle pas l'URL. Aussi, à l'espèce, c'est où il appelle la Live la première fois et dans le cas échéant, où il appelle la variable, exactement opposé de votre exemple (mais change le code fixé).
NEWLIND MON COMMENTAIRE PHOTAIRE. ÇA MARCHE! Merci beaucoup c'est exactement ce que je voulais: D
Je pense que vous pouvez approcher cela du mauvais angle. Vous pouvez déclarer une variable qui peut avoir la valeur mise à jour toutes les 2 minutes. Ensuite, peu importe lorsque vous y accédez, il retournera la valeur existante ou si un seuil N + 2 minutes est passé, il retournera la nouvelle valeur.