【发布时间】:2021-06-07 01:17:51
【问题描述】:
我正在使用这个包:sqlite3 来操作数据库查询,代码如下:
单个查询很简单:
var sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database('database.sqlite3');
let entity_1_name = ''
db.serialize(function(){
db.get('select * from table1 where id = 1', function(error, row){
entity_1_name = row.name
})
})
db.close()
但是如何按顺序执行多个查询呢?
(例如,我想运行 query1,然后是 query2,然后是 query3)
就像:
var sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database('database.sqlite3');
let entity_1_name = ''
let entity_2_name = ''
db.serialize(function(){
// this is query1
db.get('select * from table1 where id = 1', [], function(error, row){
entity_1_name = row.name
})
// this is query2
db.get('select * from table2 where dependency_column_name = ' + entity_1_name, function(error,row){
// this sql returns null value, because when this query was executed, the variable "entity_1_name" was not determined by query1.
})
})
db.close()
【问题讨论】:
-
经过相当多的实验,只有将第二个查询放在第一个查询的回调中,我才能让它工作。
-
是的,很容易进入回调地狱......
-
看起来很简单。我很惊讶他们没有任何查询方法可以返回 DB 对象以外的东西。我可能会考虑围绕这个包编写一个 async/await 包装器,因为我自己想要那个功能。
-
是的,如果你有 async/await 工作,请告诉我~谢谢。