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