gba*_*bam 1 javascript callback node.js
在这种情况下执行函数(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");
Run Code Online (Sandbox Code Playgroud)
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;
});
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,它记录"可用实验室结束",然后是"这是后响应".这就是我对回调理解的期望.然而它永远不会执行"我们在这里做到了!" 我不明白为什么?我的印象是,如果我在函数中放置一个函数 - 它将作为回调执行,但这不会发生.我是否需要以特定方式返回执行回调?
谢谢您的帮助.
您的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!");
});
Run Code Online (Sandbox Code Playgroud)
如果您想使用回调而不是承诺,我会如何写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); }
});
}
Run Code Online (Sandbox Code Playgroud)
调用此功能:
getAvailableLabs((err, data) => console.log("We made it here!");
Run Code Online (Sandbox Code Playgroud)