IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Valeur de retour fonction asynchrone


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut Valeur de retour fonction asynchrone
    Bonjour,

    J'aurais besoin d'aide car lors de l'exécution de ce code, je reçois dans la console le message "La requête Airtable n'a pas renvoyé de résultats".

    Pour info, le console.table renvoie
    [AsyncFunction: anonymous]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
      let requeteAirtable;
      try {
        requeteAirtable = new AsyncFunction("return ['test'];");
      } catch (error) {
        console.error("Erreur lors de la création de la fonction requeteAirtable : ", error);
      }
     
      if (requeteAirtable) {
        try {
          const result = await requeteAirtable;
          console.table(result);
          if (!result || result.length === 0) {
            console.error("La requête Airtable n'a pas renvoyé de résultats.");
            return; // Arrêter l'exécution si la requête ne renvoie pas de résultats
          }
    Si quelqu'un pouvait m'éclairer ce serait super

    Merci par avance !

    PS : je découvre tout juste les fonctions asynchrones donc désolé pour les erreurs de débutant !

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 201
    Par défaut
    Bonjour,
    Si quelqu'un pouvait m'éclairer ce serait super
    dans cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const result = await requeteAirtable;
    tu affectes à la variable result l'adresse de la fonction requeteAirtable et non son résulat.

    Il te faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const result = await requeteAirtable();
    ... avec les accolades.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse NoSmoking.

    Maintenant que je mets mon code définitif dans la fonction requeteAirtable, j'ai undefined dans le retour console, tandis qu'au sein de la fonction, juste avant le return, la console me renvoie bien un tableau ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ATQuery = "var tableauResultats = [];
     
      base('Clients').select({
        filterByFormula: \"{N° Client} = '127'\",
        fields: ['Prénom']
      }).eachPage(function page(records, fetchNextPage) {
        records.forEach(function(record) {
          tableauResultats.push(record.get('Prénom'));
        });
        fetchNextPage();
      }, function done(err) {
        if (err) { console.error(err); return; }
        console.log('Dans return : '); console.table(tableauResultats);
        return tableauResultats;
      });"
     
    const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
     
      let requeteAirtable;
     
      try {
        requeteAirtable = new AsyncFunction("base", ATQuery);
      } catch (error) {
        console.error("Erreur lors de la création de la fonction requeteAirtable : ", error);
      }
     
      if (requeteAirtable) {
        try {
          const result = await requeteAirtable(base);
     
          console.log(result);console.table(result);
     
          if (!result || result.length === 0) {
            console.error("La requête Airtable n'a pas renvoyé de résultats.");
            return; // Arrêter l'exécution si la requête ne renvoie pas de résultats
          }
    Saurais-tu me dire d'où vient l'erreur ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut Up
    Désolé je me permets un petit up si quelqu'un peut m'aider je suis toujours coincé

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 201
    Par défaut
    Bonjour,
    on n'a pas le contexte d’exécution, mais il y a lourd à parier que la fonction exécutée est également asynchrone, le résultat n'est donc pas disponible immédiatement.

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 506
    Par défaut
    Bonjour,

    Normalement la console renvoit une erreur Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules avec cette ligne const result = await requeteAirtable();, parce que le le await n'est pas dans un contexte de type async

    Donc en mettant le code à l'intérieur d'une async function() (nommée go() dans cet exemple) puis l'appeler ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    const AsyncFunction = Object.getPrototypeOf(async function() {}).constructor;
    let requeteAirtable;
    try {
      requeteAirtable = new AsyncFunction("return ['test'];");
    } catch (error) {
      console.error("Erreur lors de la création de la fonction requeteAirtable : ", error);
    }
     
    async function go() {
      if (requeteAirtable) {
        try {
          const result = await requeteAirtable();
          console.log('result is :', result);
          console.table(result);
          if (!result || result.length === 0) {
            console.error("La requête Airtable n'a pas renvoyé de résultats.");
            return; // Arrêter l'exécution si la requête ne renvoie pas de résultats
          }
        } catch (err) {
          alert(err);
        }
      }
    }
     
    go();

Discussions similaires

  1. Valeur de retour fonction
    Par zikolivia dans le forum VBA Word
    Réponses: 4
    Dernier message: 13/08/2012, 09h33
  2. Réponses: 2
    Dernier message: 11/05/2006, 18h41
  3. valeur de retour de la fonction "system" en C
    Par benhoeil dans le forum C
    Réponses: 14
    Dernier message: 16/09/2005, 11h30
  4. fonction operator, valeur de retour
    Par butch dans le forum C++
    Réponses: 21
    Dernier message: 20/09/2004, 10h30
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo