Противоречие между console.log (records) и console.log (records [1]) не существует в командной строке. Кажется, что какой-то другой код мешает работе консоли.
Более того, обещание, реализованное выше, разрешается с массивом результатов emtpy до того, как запрос к базе данных будет завершен. Можно ввести тайм-аут для игры с кодом.
Чтобы разрешить обещание после запроса к базе данных, необходимо разрешить его в функции обратного вызова запроса. Это также причина, по которой db.all гораздо проще обрабатывать, чем db.each.
Вместо серии запросов к базе данных можно использовать серию обещаний. Таким образом, важно дождаться разрешения каждого отдельного обещания (простое их соединение return await sqr(sqlTitle(y), []).then(sqr(sqlAuthor(y), []))
не дает уникального результата). Массив результатов заполняется по крупицам.
const sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database('ksbib.db', (err) => { if (err) { return console.log(err.message); } });
let result = [];
let p;
function sqr (sql, x)
{
return new Promise(function (resolve, reject)
{
db.all(sql, x, (err, rows) =>
{
if (err) {
reject(err);
} else {
rows.forEach( (row) => {result.push(row.objektid)} );
resolve(result);
}
});
});
}
( async () =>
{
p = await sqr(sqlTitle(y), []);
p = await sqr(sqlAuthor(y), []);
return p; //the final result
})();