Async-Await Все еще работает асинхронно - PullRequest
0 голосов
/ 14 июня 2019

Ожидание Выберите функцию *, затем выполняете работу после завершения печати.Но его стремительно проносят мимо, ожидают, что все сделают после печати вывода.так что это своего рода движение: вызывает функцию Await, затем другие вещи после того, как await запускается, прежде чем вызывается resol, затем печатает функцию 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();
        }
    });
 }

Я уверен, что это просто я скучаю по чему-то нелепому.и теперь я чувствую, что я спускаюсь в грязную яму и хожу по кругу, пожалуйста, не судите меня lol

Я хотел напечатать все в базе данных на консоль.И затем сделайте ("тест") или что-нибудь после того, как я напечатал это.

но все идет прямо через ожидание

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Проблема заключается в том, что 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();
        }
    });
}
0 голосов
/ 14 июня 2019

попробуйте это:

async function selectAll() {
    await  db.each("SELECT rowid AS id,* FROM requests", function (err, row) {
        console.log(row);
    });
}
...