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

时间:2016-03-31 09:56:02

标签: node.js express synchronous

所以基本上我正在尝试使用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在下一次在第一个函数中调用之前开始执行。 告诉我是否需要这两个功能。

编辑:

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

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

]);

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

2 个答案:

答案 0 :(得分:1)

您的两个函数都以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");
});

这样,next中的controlleri.book将为booking_controller.booknext中的booking_controller.book将成为记录"done in server.js" <的最后一种方法/ p>

答案 1 :(得分:0)

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

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

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