Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MySQL节点:MySQL查询一起执行_Javascript_Mysql_Node.js_Api_Asynchronous - Fatal编程技术网

Javascript MySQL节点:MySQL查询一起执行

Javascript MySQL节点:MySQL查询一起执行,javascript,mysql,node.js,api,asynchronous,Javascript,Mysql,Node.js,Api,Asynchronous,在下面的Controller.js文件中,我想让第二个mysql查询等待第一个查询完成,然后使用第一个查询中存储在foundUser中的数据 我很难应用async wait,因为第二个查询接收到一个空对象,因为它与第一个查询一起执行 Service.js addUser:(数据)=>{ 返回新承诺((解决、拒绝)=>{ query(`insert-into-requests\u-team(从\u-id到\u-id) 值(?,)`, [ data.from_id, data.to_id ], (错

在下面的
Controller.js
文件中,我想让第二个mysql查询等待第一个查询完成,然后使用第一个查询中存储在
foundUser
中的数据

我很难应用
async wait
,因为第二个查询接收到一个空对象,因为它与第一个查询一起执行

Service.js

addUser:(数据)=>{
返回新承诺((解决、拒绝)=>{
query(`insert-into-requests\u-team(从\u-id到\u-id)
值(?,)`,
[
data.from_id,
data.to_id
],
(错误、结果、字段)=>{
如果(错误){
返回拒绝(错误);
}
返回解析(结果);
}
);
})
},
Controller.js

addUser:async(req,res)=>{
const body=请求body;
让错误={};
让foundUser={}
const queryOne=wait mysqlpool.query('SELECT id,email FROM registration WHERE email=?',[body.email],(error,result)=>{
如果(错误){
console.log(错误)
}
如果(result.length>0){
foundUser=结果
}
});
const queryTwo=wait mysqlpool.query(`这是我要使用存储在foundUser${foundUser[0].id}'中的值的地方,,(错误,结果)=>{
如果(错误){
console.log(错误);
}
addUser(body,(err,results)=>{
如果(错误){
控制台日志(err);
返回res.status(500).json({
成功率:0,
消息:“错误”
})
}
返回res.status(200).json({
成功:1
})
})
})
}
这应该可以:

addUser:async(req,res)=>{
const body=请求body;
让错误={};
让foundUser={}
const queryOne=wait mysqlpool.query('SELECT id,email FROM registration WHERE email=?',[body.email]);
如果(错误){
console.log(错误)
}
如果(result.length>0){
foundUser=结果
const queryTwo=wait mysqlpool.query(`这是我要使用
存储在foundUser${foundUser[0].id}`)中的值
//这里有两个查询响应
}
}

问题在于,您尝试将
异步等待
回调
一起使用,异步等待只适用于承诺或生成器,但这是另一回事。回到主题,你有很多选择来解决这个问题。让我们用最简单的

有一个nodejs模块调用
util
它与node一起提供,所以您只需要在顶部导入它

从“util”导入{promisify};
//const promisify=require(“util”).promisify;
const mycolvarname=promisify(mysqlpool.query);
//module.exports=异步函数addUser(req,res){
导出异步函数addUser(req,res){
试一试{
//使用'myCoolVarName'代替mysqlpool和stuff`
//附言:我的意思是不用这么说……好吧,回去吧
const resultQuery1=wait mycolvarname(“选择当前日期()”);
const resultQuery2=wait mycolvarname(“从表中选择*行=?”,resultQuery1);
返回res.sendStatus(200);
}捕捉(错误){
return res.status(500).send({message:'we break or so'})
}
}
它应该可以工作,但是如果你想使用mysql和像神一样的节点

您好。谢谢您的回复。但是,我尝试过了,但没有成功。我根据您的建议更新了上面的代码,以便您可以查看我是否做错了。@Hoopoe\u在使用async/wait时,您不应该使用回调函数。请将回调块代码移到主查询下方,如我的代码中所示。Though我不确定您使用的库是否返回承诺。我尝试了您的代码,但它不起作用。例如,当我尝试在console.log中打印queryOne时,它不会向我显示将值分配给foundUser以便queryTwo可以使用该数据所需的数据。如果queryTwo成功,则数据将发布到MySQL。是的,这是w这是我所怀疑的。有些库使用承诺和回调。这个问题明确提到了承诺。所以我在回答中建议他们如何使用async await。