Bibliothèque et 'async function'

Avatar de l’utilisateur
alexfofo

Membre tout neuf
Messages : 1
Inscription : 21 déc. 2023 10:53

Bibliothèque et 'async function'

Message par alexfofo »

Bonjour,

J'ai des 'async function' dans un script en bibliothèque ; Mais je n'arrive pas à "les appeler/les déclarer" dans AppsScript...

D'ordinaire si ma bibliothèque s'appelle "Test" et qu'elle contient "function EXEMPLE() {" dans Apps Script je fais :
function runLibrary(){

   Test.EXEMPLE();
}
Mais je n'arrive pas a le faire pour les async function (j'ai fait pas mal de recherche, mais je suis plus entrain de me perdre que de comprendre comment faire!!).

Que dois-je mettre si ma bibliothèque contient "async function EXEMPLE() {"

Merci de m'aider
Thierry

Coach Numericoach
Invétéré
Messages : 112
Inscription : 11 sept. 2022 20:27
A remercié : 1 fois
Remercié : 21 fois

Re: Bibliothèque et 'async function'

Message par Thierry »

Salut Alex

Dans Google Apps Script, l'utilisation des fonctions asynchrones (async) peut être un peu délicate parce que l'environnement de script standard ne supporte pas directement le modèle d'exécution asynchrone de JavaScript ES6/ES7 comme dans un environnement Node.js ou dans les navigateurs modernes.

Toutefois, Google Apps Script permet l'utilisation des Promises, et tu peux donc utiliser async et await dans ce contexte. Mais il y a une astuce : tu ne peux pas directement appeler des fonctions asynchrones depuis la couche supérieure de ton script (par exemple, depuis une fonction liée à un bouton dans l'interface utilisateur de Google Sheets). Elles doivent être gérées à l'intérieur d'autres fonctions asynchrones.

Si tu as une fonction asynchrone dans une bibliothèque, tu devrais pouvoir l'appeler dans ton script Apps Script en utilisant await, mais seulement à l'intérieur d'une autre fonction asynchrone. Voici comment tu pourrais le faire :


async function runLibraryAsync(){
   await Test.EXEMPLE();
}
Pour exécuter runLibraryAsync, tu devrais l'appeler depuis une autre fonction asynchrone, ou utiliser une fonction auto-invoquée :


(function() {
   runLibraryAsync().catch(console.error);
})();


Cela dit, il est important de se rappeler que l'environnement d'exécution de Google Apps Script est singulier et que toutes les fonctionnalités des Promises ou des fonctions asynchrones ne sont pas supportées de la même manière qu'elles le seraient dans d'autres environnements JavaScript.

Si tu rencontres des problèmes avec des fonctions asynchrones dans des bibliothèques, tu devrais vérifier si ces fonctions sont correctement exportées et disponibles pour être utilisées dans le contexte de ton script. Aussi, assure-toi que la version du projet de la bibliothèque que tu utilises est bien celle qui contient les fonctions asynchrones.

Enfin, comme les détails de mise en œuvre peuvent être spécifiques à ton script et à tes besoins, n'hésite pas à fournir plus de contexte ou le code exact avec lequel tu rencontres des problèmes pour obtenir de l'aide plus détaillée.


Thierry
Avatar de l’utilisateur
NC_Quentin

Coach Numericoach
Invétéré
Messages : 32
Inscription : 10 oct. 2022 09:06
A remercié : 1 fois
Remercié : 11 fois

Re: Bibliothèque et 'async function'

Message par NC_Quentin »

Bonjour !

Pour donner un exemple peut-être plus concret à la réponse de Thierry, il n’y a normalement rien d’autre à faire après avoir ajouté votre fonction que de l’appeler, comme une fonction synchrone normale. Exemple en deux captures d’écran :

Image

Image

Le code si vous voulez tester vous-même :

Code : Tout sélectionner

async function getResult() {
  console.log("Appel à la fonction…");
  const result = await waiting();
  console.log(result);
}
function waiting(){
  return new Promise((resolve) => {
    Utilities.sleep(5000);
    resolve("Bonjour !");
});
}

Code : Tout sélectionner

function testLibrary() {
  AsyncLib.getResult();
}
Si cela ne fonctionne pas pour vous, il doit y avoir un problème au niveau du code ou du paramétrage de votre bibliothèque. Est-ce que le nom de la fonction que vous cherchez à utiliser se termine par un tiret bas (un underscore, le fameux _ ) ? Si c’est le cas, Apps Script considère que la fonction est une fonction "privée" et elle ne peut être appelée que par le script en lui-même, et pas par un autre script, ce qui expliquerait le problème.
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous