在if-else条件中使用await Promise是否为整洁代码?求优化方案
更简洁的实现方案
你提到的在else if中使用await确实会让代码可读性打折扣,这里有几种既满足“仅在比赛未结束时执行计算”,又能让代码更整洁的实现方式:
方案一:抽离await到单独分支
把异步调用从条件判断中抽出来,单独放在else分支里,结构更直观:
if (raceIsFinished) { // 胜利发奖励,失败给重试机会 } else { const shouldTakeStep = await CalculateStep(); if (shouldTakeStep) { // 比赛未结束,判断下一步操作 } else { // 未找到步骤或比赛,抛出错误.. } }
这个写法完全保留原逻辑,只是把异步结果提前用变量存储,避免了在条件判断中嵌套await,阅读起来更顺畅。
方案二:用提前return扁平化结构
如果raceIsFinished的逻辑处理完成后不需要继续执行后续代码,可以用return减少嵌套层级:
if (raceIsFinished) { // 胜利发奖励,失败给重试机会 return; // 根据实际场景选择是否return,比如跳出函数或当前逻辑块 } const shouldTakeStep = await CalculateStep(); if (shouldTakeStep) { // 比赛未结束,判断下一步操作 } else { // 未找到步骤或比赛,抛出错误.. }
这种写法把分支逻辑拆解开,代码结构更扁平,可读性更强。
方案三:简短逻辑下用三元表达式(谨慎使用)
如果后续分支的逻辑非常简短,可以考虑用三元表达式配合await,但注意不要滥用,否则会降低可读性:
if (raceIsFinished) { // 胜利发奖励,失败给重试机会 } else { await CalculateStep() ? (/* 比赛未结束,执行下一步操作 */) : (/* 未找到步骤或比赛,抛出错误 */); }
以上几种方案都确保了只有当raceIsFinished为false时才会调用CalculateStep,完全符合你的需求,同时优化了代码的整洁度。
内容的提问来源于stack exchange,提问作者Hoffie
相关产品推荐
相关产品推荐

