所以基本上我正在尝试使用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.book
和booking_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);
}
]);
第二个功能在完成第一个功能之前开始
答案 0 :(得分:1)
您的两个函数都以req
,res
和next
作为参数,这是中间件函数的签名。此外,快速中间件按顺序执行。为什么不将您的每个功能都放入他们自己的中间件中,并按照您需要的执行顺序进行操作?
// 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.book
,next
中的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按顺序执行一系列函数(同步)。每个函数中传递的回调都是强制性的。