From 4ca3a741873cb53c69b0edcfcfcd6992e77fae1e Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 27 Apr 2023 22:26:31 +0200 Subject: [PATCH] add doc about race condition when doing autocompletion --- CONTRIBUTING.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9423844..468934f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -209,6 +209,30 @@ même message. Contrairement aux autres éléments, les boutons doivent se faire collecter via la fonction [`collect`](./src/buttons/loader.ts#L46) juste après leur déclaration. +## Autocomplétion + +La réponse qu'attent Discord doit se faire obligatoirement sous 3 secondes. +Pour se faire on peut utiliser un timeout avec +[une race](https://fr.wikipedia.org/wiki/Situation_de_comp%C3%A9tition). + +```typescript +let timeoutId: NodeJS.Timeout; +const delay = new Promise(function (_, reject) { + timeoutId = setTimeout(function () { + reject(new Error()); + }, 2900); // correspond au temps du timeout en ms +}); + +const resultat = await Promise.race([delay, commandeQuiRenvoieUnPromise]) + .then((res) => { + clearTimeout(timeoutId); + return resultatVoulu; + }) + .catch(() => { + return resultatErreur; // correspond à temps écoulé ou erreur de notre commande + }); +``` + ## Modifier du code Quand vous modifiez quelque chose, pensez à mettre-à-jour les langues. Si vous