Предположим, что я хочу выполнить разные цепочки обещаний в различных блоках case
блока switch
и в конечном итоге вернуть результат клиенту через res.end()
, например:
app.post('/endpoint',function(req,res){
var reqValue=req.body.value;
var resValue="initial value";
switch(reqValue){
case 'a':
someObj.action_a()
.then(result=>{
resValue=result.id;
});
break;
case 'b':
someObj.action_b()
.then(result=>{
resValue=result.id;
});
break;
default:
resValue="default";
}
doSomethingElse();
res.end(resValue);
});
В конечном итоге resValue
возвращается как "initial value"
, что имеет смысл, поскольку асинхронные функции в блоках case
не обновляют resValue
до того, как выполнение достигнет res.end()
.Я мог бы переместить код post-switch
в разрешения обещаний, например:
case 'a':
someObj.action_a()
.then(result=>{
resValue=result.id;
doSomethingElse();
res.end(resValue);
});
break;
case 'b':
someObj.action_b()
.then(result=>{
resValue=result.id;
doSomethingElse();
res.end(resValue);
});
break;
default:
resValue="default";
doSomethingElse();
res.end(resValue);
, но тогда это дублирующий код и, следовательно, более сложный в обслуживании.Есть ли лучший способ, чтобы эти switch
опосредованные обещания все заканчивались в одном и том же res.end()
?