gadfi
@gadfi
https://gamega.org

Как уйти от callback hell в node.js?

Здравствуйте.
Сразу скажу что все что ниже никак не принижает node.js, я вообще негативно отношусь к шуткам про php/1c разработчиков, к js отношусь вполне положительно, особенно к es6 =)
Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.


Мне нравится asp но реальность усиленно толкает к node (тому виной react стек, многие клиенты хотят на бекенд node)
Что мне свое время не понравилось в node:
callback hell
orm
многое нужно делать руками

Какие orm и фреймоки сейчас актуальны в мире node, поделитесь ссылками на проекты которые вам нравятся.
Спасибо.

update:
generators, promises, async/await как бы само собой разумеющиеся, но хотелсоь бы примеров использования всего этого и актуальных библиотек
мне в свое время справедливо попеняли на критику одной популярной orm, мол что древнее уг, хотя звезд много, апдэйты регулярные, рекомендации этой орм довольно свежие
  • Вопрос задан
  • 996 просмотров
Пригласить эксперта
Ответы на вопрос 5
Negwereth
@Negwereth
lvivcss.com.ua
ну промисы же, а теперь ещё и async/await, ну
Ответ написан
@emp1re
callback наше все, остальное тлен
Ответ написан
Комментировать
igorperegudov
@igorperegudov
Frontend-developer
es6 и промисы? :)
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
Promise (+ async/await для 8го node, который будет LTS, перейду на него через пару месяцев с 6го), sequelize в качестве ORM. Express в качестве роутера.
Ответ написан
@de1m
Раз тут идёт речь про всю это лапшу, то может мне кто-то может объяснить.
У меня есть несколько слудующих друг за другом действий, причём надо дождаться, пока завершится предыдущая операция, прежде чем можно делать дальше.
1. Проверить, работает ли ssh соеденение
2. Проверить, работает ли ssh соеденение к другому серверу
3. Выполнить следующий шаг

Функция:
backupRun.prototype.checkSSHConnection = async function (serverName) {
    var self = this;
    var exec = self.bConfig.clientserver[self.eServer]
    var client = self.bConfig.clientserver[serverName]

    return new Promise((resolve, reject) => {
        self.runUnderSSH("hostname", self.sshkey, exec, client)
            .then((sshOutput) => {
                return resolve(sshOutput);
            }, (sshOutputErr) => {
                return reject(sshOutputErr)
            })
    })

};


Чтобы пройти все три шага у меня сделанно так
backupJob.checkSSHConnection(program.exec) //check ssh to exec server
          .then((response) => {
            logger.debug("SSH test connection to exec " + program.exec + " successfull");

            backupJob.checkSSHConnection(program.server) //check ssh connection to backup server
              .then((response) => {
                logger.debug("SSH test connection to backup server " + program.exec + " successfull");

                backupJob.createBackupPrePostCommands('prerun') //create backup server prerun commands
                  .then((backupPreRun) => {
                    logger.debug("Create backup prerun commands");
                          }, (err) => {
                            logger.error("Error: config array was not generated " + err);
                          })
                      })
                  })
              }, (error) => {
                logger.error("SSH test connection to backup server " + program.exec + " failed: " + error);
              })
          }, (error) => {
            logger.error("SSH test connection to exec " + program.exec + " failed: " + error);
          });


То есть та же лапша, но только с async/await.
Теперь собственно вопрос, можно это как-то по другому сделать или от этого никуда не уйти? Причём это всё выглядит при callback, promise и async/await примерно одинаково.
Всю это полностью можно увидеть тут
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы