mysql async/await dans Node.js renvoie simplement un élément non défini
P粉821274260
P粉821274260 2024-03-27 12:32:47
0
2
411

J'essaie de résoudre ce problème depuis deux jours maintenant et j'ai parcouru pratiquement tout ce que je peux trouver sur stackoverflow, peut-être qu'il me manque quelque chose puisque je le regarde depuis si longtemps.

J'ai un fichier nodejs qui charge les données utilisateur via SQL et envoie les résultats au fichier principal (serveur).

J'appelle à nouveau cette fonction en utilisant une fonction asynchrone pour obtenir la valeur de la ligne.


var sql = require('./db');
let h = /^[a-zA-Z-_.\d ]{2,180}$/;

 async function getdata(hash){
if (!hash || !hash.match(h)) {
    return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin:     false}
}else{

    const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash], async     function(err, result, fields){
        //console.log(result)
        return await result
    })

    }   
}




module.exports = { getdata };

async function getvalue(h){

    try{

     var result = await admin.getdata(h); 
    console.log('1'+result);
     if(result{

        console.log('2'+result)
     }

    }catch(err){
        console.log(err);
        console.log('Could not process request due to an error');
        return;

    }
}

getvalue(user.ident)

Les données de la requête SQL sont correctes et lorsque je les affiche dans la console, elles renvoient également les résultats corrects mais ils ne sont pas renvoyés à la fonction avec laquelle j'appelle le code, ils sont simplement indéfinis et je dois attendre ici Le sentiment est en quelque sorte de ne pas attendre les résultats, qu'est-ce qui me manque ici ? Je l'ai essayé avec quelques signes du zodiaque que j'ai pu trouver en ligne, et malheureusement je n'y suis pas encore parvenu.

J'ai essayé d'écrire la requête SQL sans utiliser async/await et d'écrire simplement la fonction appelante en utilisant async/await mais sans résultat. J'ai essayé diverses requêtes SQL avec et sans rappels SQL. J'espère que quelqu'un pourra signaler quelque chose que je déforme ou que je manque ici.

P粉821274260
P粉821274260

répondre à tous(2)
P粉194919082

La façon dont vous exécutez la requête est incorrecte, vous devriez le faire

async function getdata(hash){
    if (!hash || !hash.match(h)) {
        return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin:     false}
    }else{
        
      try{
        const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash])
        return response
      }
      catch(error){
        throw Error(error.message + "error")
      }
     } 
 }

Essayez-le, vous ne pouvez pas mélanger les rappels et les attentes comme vous l'avez fait, attendez simplement le résultat, si une erreur survient, dans ce cas elle sera gérée par le bloc catch

P粉386318086

Dans le bon cas, votre fonction de rappel asynchrone le renverra simplement à response 变量中。但无论如何,在嵌套异步函数中使用 return wait 并不是最好的方法。因此,您的结果将成为响应变量,您没有对它执行任何操作,它只会保持原样,没有返回值。因此,您将得到一个普通函数,并且由于其执行结果是 undefined . Parce que vous ne retournez rien de là.

Je recommande :

const sql = require('./db');
const h = /^[a-zA-Z-_.\d ]{2,180}$/;

async function getdata(hash){
  if (!hash || !hash.match(h)) {
    return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin:     false}
  }else{
      try {
      const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash]);
      return response;
    } catch (err) {
      throw new Error('Cold not proceed with query');  // Wwhatever message you want here
    }
  }   
}


module.exports = { getdata };
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal