为什么我的快速代码中的下一个function不能正常工作?

所以基本上我正在尝试使用下一个同步执行function但是它不同步发生:Route.JS

router.post('/era',function(req,res,next){ console.log("got request"); controlleri.book(req,res,next); booking_controller.book(req,res); console.log("done in server.js"); next(); }); 

controlleri.bookbooking_controller.book都有数据库调用,但是尽pipe在controlleri.book中添加了next(), booking_controller.book开始执行,然后在第一个函数中调用next。 告诉我是否需要这两个function。

编辑:

尝试使用asynchronous库仍然不会同步代码:

 router.post('/era',function(req,res){ console.log("got request"); async.series([ function(callback){ console.log("hi"); controlleri.book(req,res); callback(null); }, function(callback){ console.log("hias"); booking_controller.book(req,res); callback(null); } 

]);

第二个function在完成第一个function前开

你的两个函数都把reqresnext作为参数,这是中间件函数的签名。 此外,快递中间件按顺序执行。 为什么不把你的每个函数都放到他们自己的中间件中,并按照你所需要的执行顺序呢?

 // POST executes controlleri.book // then booking_controller.book, // then the log code router.post('/era', controlleri.book, booking_controller.book, function(req, res, next) { console.log("done in server.js"); }); 

这样,在controlleri.book next将是booking_controller.book ,然后在booking_controller.book将是最后一个方法logging"done in server.js"

同步使用同步库进行doinf操作。

next()是一个中间件,它告诉请求不应该被返回,但是有更多的function被应用在请求上。它运行的函数是asynchronous执行的,因为这是节点的默认行为。

 async.series([ controlleri.book(callback){ // do some stuff ... callback(null, 'one'); }, booking_controller.book(callback){ // do some more stuff ... callback(null, 'two'); } ], // optional callback function(err, results){ // results is now equal to ['one', 'two'] }); 

async.series需要按顺序(同步)执行一系列函数。 在每个函数中传递的callback是强制性的。