为什么我的 express 代码中的 next 函数不能正常工作?

Why isn't next function in my express code working properly?

所以基本上我正在尝试使用 next 同步执行功能但它没有同步发生: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 都有数据库调用但是 尽管在 controlleri.book 中添加了 next(),booking_controller.book 在第一个函数中调用 next 之前开始执行。 告诉我是否需要这两个功能。

编辑:

尝试使用异步库仍然无法同步代码:

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

]);

第二个功能在第一个功能完成之前开始

同步使用aync library进行doinf操作。

next() 是一个中间件,它告诉不应该返回请求,但是还有更多的函数要应用到 request.The 它运行的函数是异步执行的,因为这是节点的默认行为。

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 采用一组要按顺序(同步)执行的函数。每个函数中传递的回调是强制性的。

你的两个函数都将 reqresnext 作为它们的参数,这是中间件函数的签名。此外,express 中间件是按顺序执行的。为什么不将您的每个函数都放入它们自己的中间件中,并按照您需要它们的执行顺序?

// 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中的next将是最后一个记录[=19=的方法]