异步等待仍在异步运行

时间:2019-06-14 16:57:51

标签: node.js sqlite promise async-await

等待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();
        }
    });
 }

我确定只是我缺少一些荒谬的东西。 现在我感觉就像我掉进了一个兔子洞,转了一圈 请不要判断我大声笑

我想将数据库中的所有内容打印到控制台。然后在打印后执行(“测试”)或其他任何操作。

但是一切都在等待中运行

2 个答案:

答案 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();
        }
    });
}