Node.js 中的 mysql 异步/等待仅返回未定义
P粉821274260
P粉821274260 2024-03-27 12:32:47
0
2
379

我已经尝试解决这个问题两天了,基本上已经浏览了我在 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粉821274260
P粉821274260

全部回复(2)
P粉194919082

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

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

P粉386318086

在好的情况下,您的异步回调函数只会将其返回到 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 };
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!