首页  >  问答  >  正文

Node.js 中的 mysql 异步/等待仅返回未定义

我已经尝试解决这个问题两天了,基本上已经浏览了我在 stackoverflow 上能找到的所有内容,也许我错过了一些东西,因为我已经盯着它看了这么久了。

我有一个nodejs文件,它通过sql加载用户数据并将结果发送到主文件(服务器)。

我使用异步函数再次调用此函数以获取该行的值。


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)

来自sql查询的数据是正确的,当我在控制台中输出它们时,它们也返回正确的结果,但是它们没有通过返回传递给我调用代码的函数,它只是未定义的,我有在这里等待的感觉不知何故没有等待结果,我在这里错过了什么?我已经用网上能找到的几个星座进行了尝试,不幸的是我还没有达到目标。

我已经尝试不使用 async/await 编写 sql 查询,而只使用 async/await 编写调用函数,但没有结果。我尝试过使用和不使用 sql 回调的各种 sql 查询。我希望有人能指出我在这里扭曲或遗漏的内容。

P粉821274260P粉821274260206 天前381

全部回复(2)我来回复

  • 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 块处理

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

    回复
    0
  • 取消回复