假設我想發送一封電子郵件,然後更新數據庫,這兩個操作都是異步的。這是我通常會寫的。我可以用什麼來取代嵌套的異步回調?
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()
?
這被稱爲「排隊」 – zzzzBov
不清楚你的文章中的「中間件」是指某個特定的庫還是「一個可以幫助你的庫」。標籤「中間件」絕對沒有特定於JavaScript的東西。 –
@AlexeiLevenkov我明白你的觀點。我使用了「中間件」這個詞,因爲那是什麼技術。但我也不確定是否有圖書館。 – ThomasReggi