Heim  >  Fragen und Antworten  >  Hauptteil

mysql async/await in Node.js gibt einfach undefiniert zurück

Ich versuche jetzt schon seit zwei Tagen, dieses Problem zu lösen und habe im Grunde alles durchgesehen, was ich auf Stackoverflow finden kann. Vielleicht übersehe ich etwas, weil ich so lange darauf gestarrt habe.

Ich habe eine NodeJS-Datei, die Benutzerdaten über SQL lädt und die Ergebnisse an die Hauptdatei (Server) sendet.

Ich rufe diese Funktion erneut mit einer asynchronen Funktion auf, um den Wert der Zeile abzurufen.


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)

Die Daten aus der SQL-Abfrage sind korrekt und wenn ich sie in der Konsole ausgebe, geben sie auch die richtigen Ergebnisse zurück, allerdings werden sie nicht an die Funktion zurückgegeben, die ich den Code aufrufe, sie sind einfach undefiniert und ich muss hier warten. Das Gefühl wartet irgendwie nicht auf die Ergebnisse, was übersehe ich hier? Ich habe es mit ein paar Sternzeichen versucht, die ich online finden konnte, und leider bin ich noch nicht dazu gekommen.

Ich habe versucht, die SQL-Abfrage ohne Verwendung von async/await zu schreiben und nur die aufrufende Funktion mit async/await zu schreiben, aber ohne Ergebnis. Ich habe verschiedene SQL-Abfragen mit und ohne SQL-Rückrufe ausprobiert. Ich hoffe, jemand kann auf etwas hinweisen, das ich hier verdrehe oder übersehe.

P粉821274260P粉821274260206 Tage vor374

Antworte allen(2)Ich werde antworten

  • P粉194919082

    P粉1949190822024-03-28 09:02:08

    您执行查询的方法不正确,您应该这样做

    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")
          }
         } 
     }

    尝试一下,你不能像你所做的那样混合回调和等待,只是等待结果,如果出现错误,在这种情况下将由 catch 块处理

    Antwort
    0
  • P粉386318086

    P粉3863180862024-03-28 00:09:40

    在好的情况下,您的异步回调函数只会将其返回到 response 变量中。但无论如何,在嵌套异步函数中使用 return wait 并不是最好的方法。因此,您的结果将成为响应变量,您没有对它执行任何操作,它只会保持原样,没有返回值。因此,您将得到一个普通函数,并且由于其执行结果是 undefined 。因为你没有从那里返回任何东西。

    我建议:

    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 };

    Antwort
    0
  • StornierenAntwort