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

JavaScript中与Rust的Result枚举最接近的实现方案是什么

JavaScript实现类Rust Result类型的三种方案

针对你需要同时返回「操作是否成功」和「布尔判断结果」的需求,JS生态中常用三种实现方案,均可以对齐Rust Result<bool, ()> 的语义:


方案1:标准化结果对象(无额外依赖,最常用)

直接返回固定结构的普通对象区分状态,是绝大多数JS项目的通用做法:

class OrderAutomation {
  // 原有私有方法:返回市场类型字符串 / false(获取失败)
  #getMarketType() {
    // 原有Selenium获取逻辑
  }

  isB2B() {
    const marketType = this.#getMarketType();
    // 读取失败,对应Rust Err(())
    if (marketType === false) return { ok: false };
    // 读取成功,对应Rust Ok(bool)
    return { ok: true, value: marketType === "B2B" };
  }
}

调用示例:

const automation = new OrderAutomation();
const b2bCheckRes = automation.isB2B();

if (!b2bCheckRes.ok) {
  // 处理市场类型获取失败的逻辑
} else if (b2bCheckRes.value) {
  // 是B2B订单的逻辑
} else {
  // 非B2B订单的逻辑
}

方案2:自定义Result类(更贴近Rust开发体验)

如果项目中有大量类似的返回场景,可以封装通用Result类,支持类似Rust的match语法:

class Result {
  constructor(isOk, value, error) {
    this.ok = isOk;
    this.value = isOk ? value : undefined;
    this.error = isOk ? undefined : error;
  }

  static Ok(value) {
    return new Result(true, value, null);
  }

  static Err(error = null) {
    return new Result(false, null, error);
  }

  match(handlers) {
    return this.ok ? handlers.Ok(this.value) : handlers.Err(this.error);
  }
}

isB2B改造:

isB2B() {
  const marketType = this.#getMarketType();
  return marketType === false ? Result.Err() : Result.Ok(marketType === "B2B");
}

调用示例:

automation.isB2B().match({
  Ok: (isB2B) => {
    isB2B ? /* B2B逻辑 */ : /* 非B2B逻辑 */
  },
  Err: () => { /* 处理获取失败逻辑 */ }
})

方案3:元组返回(类Go风格,简洁轻量)

偏好极简写法的话可以用[错误, 返回值]的元组结构:

isB2B() {
  const marketType = this.#getMarketType();
  return marketType === false 
    ? [new Error("无法获取市场类型"), null] 
    : [null, marketType === "B2B"];
}

调用示例:

const [err, isB2B] = automation.isB2B();
if (err) {
  // 处理失败
} else if (isB2B) {
  // B2B逻辑
}

三种方案中方案1的兼容性最好,不需要额外封装就能直接使用,适合绝大多数场景;方案2适合对Rust写法熟悉、项目中有大量类似返回需求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:15:02