Dans mon application Node.js, j’ai besoin d’un mécanisme pour arrêter un appel de fonction si cela prend trop de temps.
function testIt() { ... } runFunctionOnlyFor(1000, testIt, function (err) { if (err) console.log('function call timed out'); else console.log('function call completed successfully'); });
Bien entendu, la mise en œuvre de runFuncOnlyFor
est inconnue (pour moi). Des suggestions comment implémenter ceci?
Je vois quelques problèmes ici.
1) Normalement, vous ne devriez pas écrire de code bloquant dans Node.JS, même s’il s’agit “seulement” d’une seconde. S’il s’agit d’un service Web avec plusieurs clients, un blocage pendant une seconde pourrait avoir des effets dévastateurs sur les performances.
2) Etant donné que Node.JS est effectivement mono-thread, je ne vois pas vraiment de moyen facile d’annuler l’exécution après un certain temps, à moins que le chronométrage ne soit effectué par testit
lui-même, car vous auriez besoin d’un thread séparé pour fonctionner. la fonction qui abandonne la fonction en cours d’exécution dans le premier thread.
Une meilleure approche est susceptible de rendre la fonction testit
asynchrone, de la testit
en plusieurs étapes avec des commutateurs de contexte intermédiaires et de rechercher périodiquement un indicateur ou similaire pouvant être défini par runFunctionOnlyFor
une fois qu’un minuteur a expiré.
Une autre méthode consiste à utiliser un processus enfant , si cela vous convient.