未使用callback时未定义的结果。 Nodejs,Express和SQL Server Express

以下问题由mssql,Nodejs,Gulp,Express和SQL Server Express组成。 我能够成功login到SQL Server Express。 但是,当我使用bookRoute.js代码片段而没有callback时,返回的值是未定义的 。 然而,当我使用callback,我得到的数据。 不过,我不明白为什么。

app.js代码片段:

var config = { user: 'user', password: 'password', server: 'localhost', database: 'Books', options: { instance: 'SQLEXPRESS' } }; sql.connect(config, function(err){ console.log(err); }); 

没有callback的bookRoute.js代码片段:

 bookRouter.route('/') .get(function (req, res) { console.log('book router'); var request = new sql.Request(); request.query('select * from books').then( function (err, recordset) { console.log(recordset); }) .catch(function(err){ console.log(err)}); }); 

带callback的bookRoute.js代码片段:

 bookRouter.route('/') .get(function (req, res) { console.log('book router'); var request = new sql.Request(); request.query('select * from books', function (err, recordset) { console.log(recordset); }); }); 

用户访问网页后,控制台应显示结果。 不幸的是,当不使用callback时,显示的唯一结果是未定义的。

控制台输出:

 P:\ub\lic\library>gulp serve [11:08:28] Using gulpfile P:\ub\lic\library\gulpfile.js [11:08:28] Starting 'style'... [11:08:28] Starting 'inject'... [11:08:53] Finished 'inject' after 808 ms [11:08:53] Finished 'style' after 25 s [11:08:53] Starting 'serve'... [11:08:53] Finished 'serve' after 5.31 ms [11:08:53] [nodemon] 1.9.2 [11:08:53] [nodemon] to restart at any time, enter `rs` [11:08:53] [nodemon] watching: *.js src/**/*.js [11:08:53] [nodemon] starting `node app.js` running server on port 3000 null book router undefined [11:09:21] [nodemon] restarting due to changes... Restarting the server.....beep boop beep beep [11:09:21] [nodemon] restarting due to changes... Restarting the server.....beep boop beep beep [11:09:21] [nodemon] starting `node app.js` running server on port 3000 null book router [ { id: 1, title: 'A,B,C with Big Bird ', author: 'Michael Jacob ' }, { id: 2, title: 'Peter and his Petunias ', author: 'Jess Holiday ' }, { id: 3, title: 'The Amazing Average Guy ', author: 'Don Dillon ' } ] 

没有callback的bookRoute.js代码片段:

 bookRouter.route('/').get(function (req, res) { console.log('book router'); var request = new sql.Request(); request.query('select * from books') .then(function (recordset) { console.log(recordset); }) .catch(function (err) { console.log(err); }); }); 

当使用没有callback的bookRoute.js代码片段时, then函数应该只有一个参数,它是查询的结果,它是如何在文档中声明的。当出现错误时, catch函数被调用。

Interesting Posts