Здравствуйте, пишу REST API на express.js вкупе с базой данных NeDB.js. В одной из при реализации функции получения данных из базы данных я столкнулся с проблемой. Это файл Router.js
const express = require('express');
const Database = require('./Database')
module.exports = class Router {
static initialize () {
this.api = express();
this.api.get('/classes/:class/:number/:dayOfWeek', (req, res) => {
console.log('new request ' + req.params.class, req.params.number, req.params.dayOfWeek)
var lessons = Database.getScheduler(req.params.class, req.params.number, req.params.dayOfWeek);
res.send(lessons);
});
this.api.listen(80);
}
}
Это файл Database.js
const nedb = require('nedb');
module.exports = class Database {
static initialize () {
this.db = new nedb({filename: "scheduler"});
this.db.loadDatabase();
}
static getScheduler (findingClass, findingNumber, dayOfWeek) {
var data;
this.db.find({class: findingClass.toString(), number: findingNumber.toString()}, (err, docs) => {
data = {'lessons' :docs[0].lessons[Number.parseInt(dayOfWeek)]};
//console.log(data) => "нужные данные"
});
//console.log(data) => undefined
return data;
}
}
Это файл Main.js
const Router = require('./Router');
const Database = require('./Database');
Database.initialize();
Router.initialize();
Проблема такая, почему в пределах анонимной функции переменная data хранит значение, полученное с базы данных, а за пределами анонимной функции data имеет значение undefined? И как это исправить? Заранее спасибо!
await? – nerlihmax Mar 26 '18 at 07:51async,await, если не ошибаюсь (а я могу), работает только с возвращаемыми Promise, а в этой библиотеке такого насколько я понимаю нет. Я вижу 3 решения: 1. Вы передаёте функцию в свою функцию, которая будет работать с data, и её уже подсовываете, как анонимную функцию. 2. Вы создаёте собственныйEventи подписываетесь на него. 3. Вы создаётеObservableи подписываетесь уже на него. – Komdosh Mar 26 '18 at 08:00getSchedulerкакawait, а к вызовуthis.db.findдобавлю await, разве я не добьюсь желаемого ожидания завершения работыfind? – nerlihmax Mar 26 '18 at 08:06