等待Select *函数,然后在完成打印后进行处理。 但是在打印输出之后,它匆匆忙忙地等待着一切。因此它的工作方式是:先调用Await函数,然后在await运行之后再调用其他东西,然后再调用resolve,然后打印出await函数。
老实说,我尝试了很多。使匿名异步块在函数内运行等待。我以前没有对函数使用诺言,但后来又添加了他们以为我需要解决它们。但没有骰子。
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(__dirname+'/requestLog.db');
test();
async function test(){
await selectAll();
console.log('test')
}
function selectAll(){
return new Promise((resolve, reject) => {
try {
db.serialize(function() {
db.each("SELECT rowid AS id,* FROM requests", function(err, row) {
console.log(row);
});
resolve()
});
} catch (error) {
console.log(`Error With Select ALL(): \r\n ${error}`)
reject();
}
});
}
我确定只是我缺少一些荒谬的东西。 现在我感觉就像我掉进了一个兔子洞,转了一圈 请不要判断我大声笑
我想将数据库中的所有内容打印到控制台。然后在打印后执行(“测试”)或其他任何操作。
但是一切都在等待中运行
答案 0 :(得分:0)
尝试一下:
async function selectAll() {
await db.each("SELECT rowid AS id,* FROM requests", function (err, row) {
console.log(row);
});
}
答案 1 :(得分:0)
问题是resolve()
在db.each()
之后被调用,放置解析的正确位置将是文档中的完整回调:Database#each(sql, [param, ...], [callback], [complete])
。
https://github.com/mapbox/node-sqlite3/wiki/API#databaseeachsql-param--callback-complete
function selectAll() {
return new Promise((resolve, reject) => {
try {
db.serialize(function () {
db.each("SELECT rowid AS id,* FROM requests", function (err, row) {
console.log(row);
},
(err, rowCount) => {
if (err) reject(err);
resolve(rowCount);
}
);
});
} catch (error) {
console.log(`Error With Select ALL(): \r\n ${error}`)
reject();
}
});
}