Работа с sqlite
Более подходящей ветки форму подобрать получилось, извиняй если что :-?
Делаю приложение на eletron. Для работы с БД выбрал sqlite. При старте приложения хочу получить список сотрудников(worker). Но получается, что мне в ответ возвращается 2 объекта. Сначала Primise и и только потом уже Object (с записью из бд). Как мне при вызов User.getWorker() и в подобных получать сразу объект из бд а не промис и только потом уже запись бд. Сейчас всё выглядит следующим образом: Database.js 'use strict'; class Database { constructor() { this._sqlite3 = require('sqlite3').verbose(); this._conn = new this._sqlite3.Database(__dirname + '/database.sqlite'); } findOne(sql, params) { return new Promise((resolve, reject) => this._conn.get(sql, params, function (err, row) { if(err) reject(err); resolve(row) })); } } User.js 'use strict'; class User extends Database { constructor() { super(); } getWorker() { let sql = 'select u.*, w.password from users u, workers w where u.id = w.user_id and u.type_id = ?'; return super.findOne(sql, [1]); } } index.js let user = new User(); console.log(user.getWorker().then(res => { console.log(res )})); В ответ при старте приложения получаю: ![]() Хотел всегда наследоваться от Database и не писать на вызовах ребёнка .then().cath(). Пробывал так в классе Database: _query(sql, params, action) { return new Promise((resolve, reject) => { this._conn[action](sql, params, function (err, data) { if(err) reject(err); resolve(data) }) }); } findOne(sql, params) { return this._query(sql, params, 'get').then((res) => res); } В ответ приходит промис с содержанием ответа в [[PromiseValue]]. Но не сам объект записи из БД. ![]() Объясните что я не так делаю, что бы я мог просто использовать super.findOne(sql, params) и в ответ уже получать нормальный объект записи из бд а не промис? |
async/await в помощь
<script> class FakeDB { constructor() { } getData(data) { return new Promise((res, rej) => setTimeout(res, 100, data)) } } class User extends FakeDB { constructor() { super() } getUser() { return super.getData({ user: 'ok' }) } } (async function () { let user = new User() console.log(await user.getUser()) })() </script> |
Цитата:
(async function () { let user = new User() console.log(await user.getUser()) })() |
Сделай управляющий класс в нем методы async/await...
<script> class Logic { constructor() { } run(blabla) { setInterval(this.doLogic, 100, blabla) } async doLogic(data) { const res = await Promise.resolve(data) console.log(res) return res } } const logic = new Logic() logic.run({ do: 'it' }) </script> или изучай javascript больше... |
Часовой пояс GMT +3, время: 13:13. |