NodeJS - обратный вызов не выполнен

1

После выполнения функции (getAvailableLabs) в этом случае - я хочу либо выполнить обратный вызов, либо обещание. Я не уверен, что я должен выполнять, но я не могу работать.

Маршруты:

router.get('/api/content_left', function(req, res, next){
    const Labs = require("../models/Labs.js");

    l = new Labs("Sample Lab", "Sample Description", "Sample Category", "Sample Tech");

    l.getAvailableLabs(function(){
        console.log("We made it here!");
        });
    console.log("This is post resposnse");

Labs.js:

getAvailableLabs() {
    var d = db.any('select * from labs')
        .then(data => {
            console.log(data[0]);
            return data
        })
        .catch(function (error) {
            console.log(error + " - Error in function");
            return error;
    });
}

В приведенном выше случае он регистрирует "конец доступных лабораторий", за которым следует "это ответ отклика". Это то, что я ожидал бы с моим пониманием обратных вызовов. Однако он никогда не выполняет "Мы сделали это здесь!" и я не понимаю, почему? Мое впечатление, что если я поместил функцию внутри функции - она будет выполнена как обратный вызов, однако этого не произойдет. Нужно ли мне возвращать определенный способ выполнения обратного вызова?

Спасибо за помощь.

  • 3
    вы смешиваете обратные вызовы с обещаниями ..
Теги:
callback

1 ответ

5
Лучший ответ

Функция getAvailableLabs не принимает параметр обратного вызова. Я думаю, было бы лучше оставаться последовательным и использовать обещания:

getAvailableLabs() {
    return db.any('select * from labs')
        .then(data => {
            console.log(data[0]);
            return data
        })
        .catch(function (error) {
            console.log(error + " - Error in function");
            return error;
    });
}

...

l.getAvailableLabs().then(data => {
    console.log("We made it here!");
});

Если вы хотите использовать обратный вызов вместо обещания здесь, как я напишу getAvailableLabs:

getAvailableLabs (callback) {
    db.any('select * from labs')
        .then(data => {
            console.log(data[0]);
            if (callback) { callback(null, data); }
        })
        .catch(function (error) {
            console.log(error + " - Error in function");
            if (callback) { callback(error); }
    });
}

Вызов этой функции:

getAvailableLabs((err, data) => console.log("We made it here!");
  • 2
    И в новейших версиях вы можете связать это с async / await.
  • 0
    Большое спасибо! Если бы он принимал параметр обратного вызова - это появилось бы как функция ({<code>}) в контексте getAvailableLabs ()?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню