gpt4 book ai didi

javascript - 如何在 switch block 的每种情况下解决不同的 promise 并将其结果传递给同一函数?

转载 作者:行者123 更新时间:2023-11-30 09:17:11 24 4
gpt4 key购买 nike

假设我想在一个switch block 的各个case block 中执行不同的promise 链,并最终通过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 block 中的异步函数在执行到达 res.end() 之前不更新 resValue。我可以将 post-switch 代码移动到这样的 promise 解决方案中:

         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 为中介的 promise 都以相同的 res.end() 结束?

最佳答案

您可以像这样使用单个变量来保持所需 resValue 的 promise

app.post('/endpoint',function(req,res){
let reqValue=req.body.value;
let p;
switch(reqValue){
case 'a':
p = someObj.action_a().then(result => result.id);
break;
case 'b':
p = someObj.action_b().then(result => result.id);
break;
default:
// p has to be a promise, so make it one
p = Promise.resolve("default");
}
p.then(resValue => {
doSomethingElse();
res.end(resValue);
});
});

或者使用现代 javascript,使用 async/await

app.post('/endpoint',async function(req,res){
let reqValue=req.body.value;
let resValue="initial value";
switch(reqValue){
case 'a':
resValue = await someObj.action_a().then(result => result.id);
break;
case 'b':
resValue = await someObj.action_b().then(result => result.id);
break;
default:
resValue = "default";
}
doSomethingElse();
res.end(resValue);
});

关于javascript - 如何在 switch block 的每种情况下解决不同的 promise 并将其结果传递给同一函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54281977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com