我正在用angular&node.js开发一个应用程序。在代码的某个特定点,我需要执行INSERT
查询,然后返回insertId
,然后将另一个INSERT
与上面的insertId
一起放入另一个表。但是我总是以0
作为insertId,因为它的异步特性使其不等待第一个查询执行。因此,我需要一种变通方法以等待第一个查询结果,然后执行第二个查询。我的代码如下所示。
insert_users_query = `INSERT INTO users xxxxxx`;
connection.query(insert_users_query, (err, result)=>{
var user_id = result.insertId;
});
second_query = `INSERT INTO another_table (user_id) VALUES('${user_id}')`;
connection.query(linked_accounts_query, (err, result)=>{
// this query saves 0 as user_id in table.
});
我认为可以通过promises
完成。但是,由于我是这方面的初学者,并且也阅读了Promises
上的一篇文章,但是我无法找到一个简单的解决方案。任何帮助将不胜感激!
谢谢。
答案 0 :(得分:1)
您可以这样做。
insert_users_query = `INSERT INTO users xxxxxx`;
connection.query(insert_users_query, (err, result)=>{// query 1( getting insertId as result.insertId)
if(err){
//handle error
}else{
var user_id = result.insertId; // using insertId
second_query = `INSERT INTO another_table (user_id) VALUES('${user_id}')`;
connection.query(linked_accounts_query, (err, result2)=>{//query2
// this query saves 0 as user_id in table.
}
});
});
这是通过使用回调完成的,您可以使用await
来实现。
基本上,这有点简单,我们将在执行query1之后将err,result
作为对象,然后可以在query1中使用query1的err,result
运行另一个查询。
答案 1 :(得分:0)
您也可以使用async / await来代替在1st内调用第二个查询,因为当查询数量增加时,第二个查询会造成混乱。
但是由于def menu():
vel = 4
vel_left = 5
vel_right = -5
player = pygame.Rect(40, 45, 30, 30)
rotatingrects = [
pygame.Rect(630, 300, 250, 20),
pygame.Rect(920, 300, 250, 20)
]
walls = [
pygame.Rect(0, 0, 1200, 20), pygame.Rect(0, 0, 20, 600),
pygame.Rect(0, 580, 1200, 20), pygame.Rect(1180, 0, 20, 600),
pygame.Rect(300, 0, 20, 530), pygame.Rect(20, 100, 230, 20),
pygame.Rect(70, 200, 230, 20), pygame.Rect(20, 300, 230, 20),
pygame.Rect(70, 400, 230, 20), pygame.Rect(600, 100, 20, 500)
]
movingrects = [
MovingRect(320, 120, 30, 30, vel_left),
MovingRect(320, 240, 30, 30, vel_left),
MovingRect(320, 360, 30, 30, vel_left),
MovingRect(570, 180, 30, 30, vel_right),
MovingRect(570, 300, 30, 30, vel_right),
MovingRect(570, 420, 30, 30, vel_right)
]
返回了回调,因此我们需要将其包装在promise中。
connection.query
您可以调用此通用async function main(){
try{
const insert_users_query = `INSERT INTO users xxxxxx`;
const result = await queryDb(insert_users_query);
let user_id = result.insertId;
const linked_accounts_query = `INSERT INTO another_table (user_id) VALUES('${user_id}')`;
await queryDb(linked_accounts_query);
}
catch(e){
//catch error
}
}
函数,为所有查询返回queryDb
。
promise