NodeJs: Annuler l’appel de fonction si cela prend trop de temps

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.