【问题标题】:NodeJS - Callback Not executedNodeJS - 回调未执行
【发布时间】:2017-07-30 19:33:04
【问题描述】:

在这种情况下,我执行了一个函数 (getAvailableLabs) 之后 - 我想执行一个回调或一个 Promise。我不确定我应该执行哪个,但是我不能让任何一个工作。

路线:

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

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

感谢您的帮助。

【问题讨论】:

  • 你将回调与承诺混合在一起......

标签: javascript node.js callback


【解决方案1】:

您的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!");
});

如果您想使用回调而不是 Promise,我会这样写 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!");

【讨论】:

  • 在最新版本中,您可以将其与 async/await 配对。
  • 非常感谢!如果它确实接受了一个回调参数——它会在 getAvailableLabs() 的上下文中显示为一个函数({})吗?
  • 我将在我的回答中添加关于如何通过回调执行此操作的内容,因为代码太多,无法评论。
  • 我无法表达我多么感谢您的帮助!如果我能给你买啤酒,我会的。
  • @Andy Gaskell 您的回调样式无效,在 node.js 中第一个参数必须是errornull,第二个参数必须是data。所以第一个回调调用应该是callback(null, data),第二个是callback(err)
猜你喜欢
  • 2016-12-23
  • 1970-01-01
  • 2019-08-23
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多