7
votes

Heure JavaScript passée depuis l'horodatage

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> xxx pré>

J'ai essayé de calculer le temps avec des choses comme P>

if((currentime + 2) < futuretime)


1 commentaires

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.


5 Réponses :


0
votes

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/


1 commentaires

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.



1
votes

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'


8 commentaires

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.



3
votes

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


4 commentaires

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.



0
votes

Vous pouvez faire quelque chose comme ça xxx


0 commentaires

12
votes

Transformer votre algorithme en travail JavaScript, vous pouvez faire quelque chose comme ceci: xxx

vous pouvez mettre le bloc si bloquer dans une fonction et l'appelez à tout moment Voulez-vous obtenir les informations de la variable ou de l'URL: xxx

espère que cela aide.


4 commentaires

Merci, mais cela appelle toujours le si et non l'autre après 2 minutes.


Désolé mon mauvais. La variable doit être initialement 0 . 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