等待Select *函数,然后在打印完成后执行某些操作。但是在打印输出之后,它就会匆忙地经过等待,做完所有的事情。所以它是这样的:调用Await函数,然后在await之后运行其他东西,然后调用resolve,然后打印出await函数。
老实说,我已经尝试了很多。使匿名异步块在函数内部运行等待。我之前没有在函数中使用promises,但后来添加了它们,认为我需要解决它们。但没有骰子。
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();
}
});
}我敢肯定只是我错过了一些可笑的东西。现在我感觉像是掉进了一个洞里,转来转去,请不要评判我,哈哈
我想将数据库中的所有内容都打印到控制台。然后在打印后执行(“test”)或其他任何操作。
但所有的一切都在等待中
发布于 2019-06-15 02:33:55
问题是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();
}
});
}发布于 2019-06-15 02:25:48
试试这个:
async function selectAll() {
await db.each("SELECT rowid AS id,* FROM requests", function (err, row) {
console.log(row);
});
}https://stackoverflow.com/questions/56602443
复制相似问题