You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:循环调用随机乘法函数直至成功的方案是否可行?

方案可行性与优化建议

现有方案是否可接受?

你的方案完全可以接受,它正确实现了「持续调用randMulti直到获取有效乘法结果」的核心需求,严格遵守了不可修改原函数的限制,逻辑清晰易懂,能够稳定完成任务。

更优的实现方式

原始方案可以从代码精简、控制台整洁度两方面优化:

  • 移除冗余的allOK标志位与res变量,成功时直接返回结果,无需额外状态标记
  • 去掉catch块中的console.error:因为失败是预期内的高频情况,打印大量错误会污染控制台日志,完全不需要处理

优化后的循环实现(推荐)

class MultiError extends Error{}

function randMulti(a,b) {
  if(Math.random() < 0.1) {
    return a*b;
  } else {
    throw new MultiError("Error Occurred");
  }
}

function randExecuter(fn) {
  return function(a,b) {
    while(true) {
      try {
        // 成功直接返回,终止循环
        return fn(a,b);
      } catch(e) {
        // 预期内的失败,无需额外处理
      }
    }
  }
}

let multiply = randExecuter(randMulti);
const result = multiply(7,5);
console.log(result);

递归实现(仅作参考)

也可以用递归方式实现,但要注意:极端情况下(连续无数次失败)可能触发栈溢出,因此循环方式更稳妥:

function randExecuter(fn) {
  return function(a,b) {
    try {
      return fn(a,b);
    } catch(e) {
      // 递归调用当前函数重试
      return arguments.callee(a,b);
    }
  }
}

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:15:39