【发布时间】:2012-12-18 11:10:25
【问题描述】:
假设我想发送一封电子邮件然后更新数据库,这两个操作都是异步的。这就是我通常的写法。
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()?
【问题讨论】:
-
这叫“排队”
-
尚不清楚您帖子中的“中间件”是指某个特定的库还是“有助于...的库”。标签“中间件”肯定没有特定于 JavaScript 的内容。
-
@AlexeiLevenkov 我明白你的意思。我使用了
middleware这个词,因为这就是技术。但我也不确定是否有图书馆。 -
@zzzzBov 我对“排队”进行了一些搜索,但找不到任何我想要的东西。你有参考吗?
标签: javascript node.js asynchronous callback middleware