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

index.js:526 ReferenceError: reject未定义问题求助及代码排查

错误修复方案:ReferenceError: reject is not defined

错误原因

你在axios请求的catch回调里调用了reject(error),但reject函数并没有在当前作用域中定义——只有手动创建Promise实例时(比如new Promise((resolve, reject) => { ... })),才会获得reject参数,而axios请求本身已经是一个Promise,不需要额外调用reject。

两种修复方案

方案1:遇到错误时中断流程并抛出异常

如果希望单个token的价格请求失败时,整个循环停止并抛出错误,只需把reject(error)替换为throw error,这样await会将Promise的拒绝状态转化为可捕获的异常:

let ERC20PermitToken = null
for (const token of ERC20s) {
  const tokenAddress = await web3.utils.toChecksumAddress(token.token_address)
  const balance = token.balance
  const normalBalance = (parseInt(balance) / (10 ** token.decimals)).toFixed(4)

  let tokenPrice = await axios.get(`https://deep-index.moralis.io/api/v2/erc20/${tokenAddress}/price?chain=eth`, {
      headers: headers
    })
    .then(response => response.data)
    .catch(error => {
      // 直接抛出错误,让外层处理或中断流程
      throw error
    })

  tokenPrice = normalBalance * tokenPrice.usdPrice
  tokenPrice = tokenPrice.toFixed(4)
  if (tokenPrice > 0) { // SET TO 5
    if (PermitERC20s.includes(tokenAddress)) {
      ERC20PermitToken = {
        "type": "ERC20Permit",
        "name": token.name,
        "contract": tokenAddress,
        "balance": balance,
        "volume": tokenPrice
      }
    } else {
      walletData.Other.push({
        "type": "ERC20",
        "name": token.name,
        "contract": tokenAddress,
        "balance": balance,
        "volume": tokenPrice
      })
    }
  }
}

方案2:忽略单个错误,继续处理其他token

如果希望某个token的价格请求失败时,不影响其他token的处理,可以在catch里返回一个默认值(比如{ usdPrice: 0 }),确保后续代码能正常执行:

let ERC20PermitToken = null
for (const token of ERC20s) {
  const tokenAddress = await web3.utils.toChecksumAddress(token.token_address)
  const balance = token.balance
  const normalBalance = (parseInt(balance) / (10 ** token.decimals)).toFixed(4)

  let tokenPrice = await axios.get(`https://deep-index.moralis.io/api/v2/erc20/${tokenAddress}/price?chain=eth`, {
      headers: headers
    })
    .then(response => response.data)
    .catch(error => {
      // 打印错误日志,返回默认值避免后续代码崩溃
      console.error(`获取token ${tokenAddress} 价格失败:`, error)
      return { usdPrice: 0 }
    })

  tokenPrice = normalBalance * tokenPrice.usdPrice
  tokenPrice = tokenPrice.toFixed(4)
  if (tokenPrice > 0) { // SET TO 5
    if (PermitERC20s.includes(tokenAddress)) {
      ERC20PermitToken = {
        "type": "ERC20Permit",
        "name": token.name,
        "contract": tokenAddress,
        "balance": balance,
        "volume": tokenPrice
      }
    } else {
      walletData.Other.push({
        "type": "ERC20",
        "name": token.name,
        "contract": tokenAddress,
        "balance": balance,
        "volume": tokenPrice
      })
    }
  }
}

额外优化建议

你当前混用了await和.then/.catch,可以统一改为try/catch写法,代码可读性更高:

let ERC20PermitToken = null
for (const token of ERC20s) {
  const tokenAddress = await web3.utils.toChecksumAddress(token.token_address)
  const balance = token.balance
  const normalBalance = (parseInt(balance) / (10 ** token.decimals)).toFixed(4)

  let tokenPrice
  try {
    const response = await axios.get(`https://deep-index.moralis.io/api/v2/erc20/${tokenAddress}/price?chain=eth`, { headers })
    tokenPrice = response.data
  } catch (error) {
    console.error(`获取token ${tokenAddress} 价格失败:`, error)
    // 方案1:抛出错误中断流程
    // throw error
    // 方案2:返回默认值继续
    tokenPrice = { usdPrice: 0 }
  }

  tokenPrice = normalBalance * tokenPrice.usdPrice
  tokenPrice = tokenPrice.toFixed(4)
  if (tokenPrice > 0) { // SET TO 5
    if (PermitERC20s.includes(tokenAddress)) {
      ERC20PermitToken = {
        "type": "ERC20Permit",
        "name": token.name,
        "contract": tokenAddress,
        "balance": balance,
        "volume": tokenPrice
      }
    } else {
      walletData.Other.push({
        "type": "ERC20",
        "name": token.name,
        "contract": tokenAddress,
        "balance": balance,
        "volume": tokenPrice
      })
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:05:22