Как правильно использовать обещания в проекте node.js с использованием классов? - PullRequest
0 голосов
/ 09 мая 2019

(решение внизу)

Проект строительства

Я конвертирую «простой» проект node.js в полноценный объектный проект node.js. Я нашел ресурсы, чтобы лучше организовать свои файлы, но у меня все еще есть проблемы с классами. Я сделал проект php в объекте, но структура JS узла кажется особенной. Я проконсультировался:

Насколько я понимаю:

  • app.js - это мой маршрутизатор, с которого я буду определять, какой контроллер мне нужен для ответа на запрос клиента.
  • / route - это место, где у меня есть контроллеры, где я создаю экземпляры своих объектов и использую их методы. проектная организация

Мои классы находятся в папке в корне, но я могу переместить ее в папку public / javascript. Моя проблема заключается в том, чтобы ограничить код уровня приложения классами, которые должны обращаться к базе данных. Например, только класс User имеет метод для обновления имени пользователя в базе данных. Так что в моих контроллерах (/ маршруты) я не хочу никаких запросов SQL (кстати, используя sequelize).

Я не знаю, как это сделать

Я попытался выполнить обещание в контроллере, в котором я вызываю метод класса, который выполняет запрос и возвращает результат.

var user = new User();
var users = new Promise(function(resolve, reject) {
    user.select();
});
Promise.all([users]).then(function(values){
    console.log(values);
}
  console.log(users);
)

В моем классе я делаю

models.user.findAll({
    attributes: ['user_login','user_points','user_id']
}).then(
    users => {
        resolve(users);
    }
)

Здесь, как и ожидалось, разрешение не определено. Но если я поставлю решимость сразу после вызова метода класса следующим образом:

var users = new Promise(function(resolve, reject) {
 user.select();
 resolve(result);
});

результат не определен, и он будет решен без ожидания выполнения запроса.

Вопросы

Поскольку я не экспериментировал и не нашел какой-либо подробной или недавней темы на эту тему, я понятия не имею, как поступить. Мой первый вопрос: может ли проблема быть связана с организацией файлов (или, как правило, моя обычная / хорошая практика). Мой второй вопрос: как мне обработать этот тип структуры с помощью классов и node.js, чтобы мой пример работал?

Спасибо за вашу помощь. Я добавлю, что, поскольку я не нахожу недавнюю тему на эту тему, я очень заинтересован в создании пошагового руководства по созданию полного объектного проекта в файле node.js с app / route / classes и ES6 js. Цель состоит в том, чтобы лучше понять это и передать его моему руководителю, чтобы он мог исправить это и использовать его для будущих новобранцев и опубликовать его.

Решение

Благодаря @estus я теперь понимаю, что вы можете хранить Promise в переменной. Это позволяет мне использовать .then для этой переменной. var result = a.select(); result.then(function(result) { console.log('my result : ', result); });

В классе вы возвращаете результат только потому, что не хотите выполнять обещание Sequelize:

users => {
   return users;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...