madmages
@madmages
Человек прямоходящий

Запрос к базе на node js, но не вызвав предыдущий эвент. Как?

суть в чем. есть объект db, который работает с базой. У этого объекта есть метод done, который вызывается при приходе данных с базы. Сам объект db это обертка над mysql модулем, а метод done это просто callback функция на приход данных от запроса к базе.
Все выглядит так:
var headObj = this;
this.done = function (res) {
        console.log("Данные из базы пришли, хендлера нет. Первая строка данных: ", res[0]);
    };
    this.q = function (sql, arr) {
        connection.query(sql, arr, function (err, rows) {
            if (err) throw "Ошибка запроса к базе: " + err;
            headObj.done(rows);
            //headObj.done = function () {};
        });
    };

мне часто надо делать подобные запросы типа
x.done = function(){
    x.done = function(){
        .......
    };
    x.q(sql2);
};
x.q(sql)

но суть в том что при втором вызове done срабатывает первый тоже, а обнулять функцию done тоже не панацея, потому что в рекурсии мне надо использовать done а он при первом использовании затирается. Как быть?
  • Вопрос задан
  • 2726 просмотров
Решения вопроса 1
icelaba
@icelaba
Знаю и умею всё
Проблема в обертке, потому либо поправьте обертку чтобы она принимала done в качестве callback, либо на каждом шаге сохраняйте предыдущий done в стек, и восстанавливайте потом, что приведет вас рано или поздно к неловимой плохой ошибке.
Я давно все обращения к db - redis mongo sql обернул промисами q https://github.com/kriskowal/q
С того момента callback hell меня больше не преследует, чего и вам желаю
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 17:31
150000 руб./за проект
27 апр. 2024, в 16:39
1000 руб./в час
27 апр. 2024, в 16:38
30000 руб./за проект