假设我想发送一封电子邮件然后更新数据库,这两个操作都是异步的。这就是我通常会写它的方式。
send_email(function(err, id){
if(err){
console.log("error");
}else{
update_database(id,function(err, id){
if(err){
console.log("error");
}else{
console.log("success");
}
});
}
});
我想用中间件来代替。
var mid = {};
mid.send_email = function(){
return function(next){
send_email(function(err,id){
if(err){
console.log("error");
}else{
next(id);
}
});
}
}
mid.update_database = function(){
return function(id,next){
update_database(id,function(err,id){
if(err){
console.log("error");
}else{
next(id);
}
});
}
}
mid.success = function(){
return function(id,next){
console.log("success")
next(id);
}
}
堆叠中间件。
middleware.use(mid.send_email());
middleware.use(mid.update_database());
middleware.use(mid.success());
手头有两个主要问题。
- 如何使用中间件代替嵌套回调?
- 是否可以将变量传递给
next()
?