Je veux qu'il complète quand il a trouvé une minute. Donc, évidemment, cela peut prendre jusqu'à une minute:
syncToMinute().then(() => { anotherFunc(); })
4 Réponses :
Si vous avez des fonctions ASYNC, vous pouvez faire
async function syncToMinute() { const date = new Date(); let seconds = date.getSeconds(); if( seconds === 0){ console.log('Minute Found'); return true; } else { await new Promise(resolve => setTimeout(resolve, 1000)); // wait 1 second return await syncToMinute(); } }
Vous pouvez calculer combien de secondes rester jusqu'à la minute suivante (un delta), puis définir un
p> Settimeout CODE> qui résout un
prometteur code> dans ce delta.
const syncToMinute = () => {
const delta = 60 - (new Date()).getSeconds()
return new Promise(resolve => setTimeout(resolve, delta * 1000))
}
syncToMinute()
.then(() => {
console.log('Minute')
})
mais quand Getseconds retourne 0, il attendrait une minute
@Evenytimoshenko Je ne vais pas couvrir les cas d'Edge; J'ai démontré le concept, l'OP peut s'ajuster si nécessaire.
@Nik - Vous dites donc que je ne peux pas vous promener ma fonction, même si je le voulais?
@ J.m. Bien sûr, vous pouvez mais cela gèlerait toujours le processus.
Eh bien, il ne ferait pas ce qu'une promesse est censée faire ce qui permet de procéder au code de procédure à exécuter et à exécuter ensuite () lorsque la promesse est terminée et renvoyée?
Je n'ai jamais fait confiance à la précision de la sécurité et de seinterval. Mais si tout cela fonctionnera, je peux changer de méthodes.
J.M. Le code de longue date qui ne traite pas avec les E / S gèle le processus indépendamment s'il est enveloppé dans une promesse. Je suis trop simplifié ici, alors vous voudrez peut-être lire sur le toi-même.
+1 Pour mentionner que pendant que la boucle ne peut être promis.
const resolveTimeout = () => { const seconds = 59 - new Date().getSeconds(); return new Promise(resolve => setTimeout(resolve, seconds * 1000)); } resolveTimeout().then(() => { console.log('Minute found')});
Pourquoi utilisez-vous 59 et pas 60? Si la fonction est appelée à 12h00:00, votre code tirera à 12h00:59, pas 12:01:00 ...
Oui, vous pouvez simplement calculer la différence de temps entre votre temps et votre temps requis: Exemple: P> Start wait, time is:
Date Tue Dec 03 2019 15:30:36 GMT+0100 (Central European Standard Time)
debugger eval code:16:13
Done waiting, time is:
Date Tue Dec 03 2019 15:31:00 GMT+0100 (Central European Standard Time)
Cela a-t-il un bon but? Qu'en est-il des millisecondes?
Je n'ai pas encore besoin de ce niveau de précision. J'ai juste besoin de connaître le moyen le plus simple d'acquérir cette fonction.
Que voulez-vous atteindre avec votre fonction? Peut-être qu'il y a une meilleure façon de le faire. Voulez-vous exécuter une fonction chaque minute?
Plutôt que de vérifier constamment, pourquoi ne vérifiez-vous pas à quelle distance vous êtes d'une minute, puis attendez-vous aussi longtemps?
Je fais un delta entre mon temps de client et mon temps de serveur à l'aide de la nouvelle date (code> nouvelle date () code> constructeur sur chacun. Je suis sûr qu'il y a plusieurs façons de le faire, mais c'est ainsi que ma préférence.
Je veux connaître le moment exact Nouvelle date () hits une minute. C'était une question sur la façon de savoir comment s'inclure qu'il ne s'agit pas d'une autre façon de le faire ... à moins que mon chemin n'est impossible?
Je tire à moi comme la solution de Tomas fait ce qui est recherché, à moins que je ne comprends pas les exigences. Sur Modifier: Oh non, je peux vous voir que vous vouliez avoir un exemple où vous utilisez la promesse.Then lorsque la minute est terminée.