После выполнения функции (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;
});
}
В приведенном выше случае он регистрирует "конец доступных лабораторий", за которым следует "это ответ отклика". Это то, что я ожидал бы с моим пониманием обратных вызовов. Однако он никогда не выполняет "Мы сделали это здесь!" и я не понимаю, почему? Мое впечатление, что если я поместил функцию внутри функции - она будет выполнена как обратный вызов, однако этого не произойдет. Нужно ли мне возвращать определенный способ выполнения обратного вызова?
Спасибо за помощь.
Функция 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!");