2017-10-15 6 views
0

Je voudrais juste savoir quelle méthode serait la meilleure pour exécuter une fonction à une date donnée dans JS. Ma première idée est de faire tourner une boucle dans un web worker vérifiant chaque minute si je suis dans la minute où je suis censé afficher ma notification, mais je me demande s'il y a une manière plus propre de le faire.Meilleur moyen d'exécuter du code à une date donnée en JavaScript

Une idée? PS: Je n'ai pas vraiment besoin de réponse car j'utilise le cordova plugin local-notifications et j'utilise l'argument 'at', cette question est pour la curiosité/l'apprentissage.

EDIT: Certains d'entre vous trouverez la question trop large, en fait, il est large, pas trop large (je ne demande pas « ? Comment envoyer des notifications ») et c'est tout point, je suis à la recherche Pour un algorithme général/explication d'avoir une réponse riche ici, donc les explications pour toutes les plates-formes sont les bienvenus pour aider à saisir les différences du problème à chaque fois.

+1

Où cela va-t-il se dérouler? Nœud? Application mobile? – diegoaguilar

+3

J'imagine que la meilleure façon serait de calculer combien de temps jusqu'à l'heure cible, puis utiliser 'setTimeout'. – Shadow

+0

Partout, c'est vraiment de la pure curiosité. Si vous pouvez me donner des explications sur les deux ce serait parfait! –

Répondre

1

Eh bien, cela dépend vraiment de l'endroit où votre application va vivre. Si c'est dans le navigateur, le noeud, etc.

La solution la plus simple mais aussi fragile serait de calculer la différence en millisecondes entre maintenant et le temps d'exécution. Alors juste setTimeout() avec cette différence. Mais si le navigateur se rafraîchit, alors bien sûr, ce délai est expiré à moins que vous ne réexécutez la même chose. Mais sans en savoir plus sur la structure et la nature de votre application, il est difficile d'en savoir plus.

+0

Intéressant! Je pense que si la magie s'exécute dans un travailleur Web, le navigateur actualisé ne devrait pas être un problème non? –

+0

Vous n'utilisez pas un webworker pour ce genre de choses. Si le navigateur est actualisé, les travailleurs sont tués. Ils ne persistent pas. Si vous avez besoin d'un planificateur complet, vous avez besoin d'un service back-end que l'application peut soit interroger, soit se connecter via un socket Web pour recevoir des notifications. – Geuis

+0

D'accord, cela a du sens, donc je peux considérer que le contrôle de temps mecanic doit être sur le côté serveur et envoyer un message en temps réel au client, ce qui fera un travail d'affichage de la notification. Cela semble être une bonne solution, surtout pour les applications multi plates-formes! –