搜索

首页  >  问答  >  正文

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

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

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

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

1

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

1

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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)

1

 

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

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

P粉821274260P粉821274260360 天前525

全部回复(2)我来回复

  • P粉194919082

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

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    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 。因为你没有从那里返回任何东西。

    我建议:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    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
  • 取消回复