NodeJS - 回调未执行

时间:2017-07-30 19:33:04

标签: javascript node.js callback

在这种情况下执行函数(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;
    });
}

在上述情况下,它会记录“可用实验室结束”,然后是“这是回复后”。这就是我对回调理解的期望。然而它永远不会执行“我们在这里做到了!”我不明白为什么?我的印象是,如果我在函数中放置一个函数 - 它将作为回调执行,但这不会发生。我是否需要以特定方式返回执行回调?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您的var firstbuild = document.getElementById("firstbuild"); 函数不接受回调参数。我认为保持一致并使用承诺是最好的:

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); }
    });
}