Web3 BatchRequest 总是返回未定义,我做错了什么?

2024-01-09

我正在尝试使用 web3 Batch 来一起调用代币余额。当我调用batch.execute()时,它返回未定义的而不是已添加到批处理中的已解决的请求。

有人可以告诉我我把事情搞砸的地方吗?

这是我的代码。

async generateContractFunctionList(
    address: Address,
    tokens: Token[],
    blockNumber: number
  ) {
    const batch = new this.web3.BatchRequest();

    for (let i = 0; i < tokens.length; i++) {
      const contract = new this.web3.eth.Contract(balanceABI as AbiItem[]);
      contract.options.address = tokens[i].address;

      batch.add(
        contract.methods
          .balanceOf(address.address)
          .call.request({}, blockNumber)
      );
    }

    return batch;
  }
 async updateBalances() {
    try {
      const addresses = await this.addressService.find();
      const tokens = await this.tokenService.find();
      const blockNumber = await this.web3.eth.getBlockNumber();

      for (let i = 0; i < addresses.length; i++) {
        const address = addresses[i];
        const batch = this.generateContractFunctionList(address, tokens, blockNumber);

        const response = await (await batch).execute();
        console.log(response);  //returns undefined 
      } 
    } catch (error: unknown) {
      if (error instanceof Error) {
        console.log(`UpdateBalanceService updateBalances`, error.message);
      }
    }
  }

为什么batch.execute()不返回任何内容并且无效?我采用了本文中的示例,并根据我的需要对其进行了修改,但没有更改太多可能会造成混乱的内容。

https://chainstack.com/the-ultimate-guide-to-getting-multiple-token-balances-on-ethereum/ https://chainstack.com/the-ultimate-guide-to-getting-multiple-token-balances-on-ethereum/

当我将回调函数添加到“batch.add”和控制台日志时,余额会记录到控制台。但我正在尝试在 .execute() 上使用 async wait ,那么如何从使用 wait batch.execute() 的方法调用中获取结果,并将所有回调结果都放在其中,就像博客文章中所写的那样。


一个快速但肮脏的解决方案是使用过时的软件包版本。

包.json:

....
"dependencies": {
    ...
    "web3": "^2.0.0-alpha.1",
    ...
    }
....

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web3 BatchRequest 总是返回未定义,我做错了什么? 的相关文章

随机推荐

  • Visual Studio 2010 Ultimate 无法再创建 VC++ 项目

    突然 Visual Studio 2010 Ultimate 无法创建运行 Windows 7 的 VC 项目 例如 当我转到 新建 gt 项目 gt Visual C gt Win32 gt Win32 控制台应用程序 并执行向导时 我收
  • terraform aws_elastic_beanstalk_environment SSL 策略名称

    使用terraform 有谁知道如何设置预定义的ELB 的 SSL 安全策略 来自内部aws elastic beanstalk environment资源 我尝试了各种参数排列 从类似下面的内容中分支出来 但没有运气 setting na
  • 如何通过避免 mongodb 聚合中的空值来进行 $lookup

    在这里 我使用 lookup 到其他集合的左连接 查询工作正常 但是当某些记录缺少值时 它会返回 errmsg in requires an array as a second argument found null 查询文档结构如下 no
  • Angular 4 - 验证器自定义函数这是未定义的

    我正在构建一个应用程序 与组件 FormComponent 在里面我使用 Angular Core 的反应式表单模块 并创建一个自定义验证器 该函数正在使用 this 调用另一个函数 因为我认为它将引用 FormComponent 但它指的
  • Swift 中 `let` 和 `var` 有什么区别?

    有什么区别let and var用苹果的 Swift 语言 根据我的理解 它是一种编译语言 但它不会在编译时检查类型 这让我很困惑 编译器如何知道类型错误 如果编译器不检查类型 那不是生产环境的问题吗 当我尝试将值分配给 a 时出现此错误l
  • YouTube 视频标题背景

    我正在尝试创建一些网站模板来帮助我提高前端开发技能 因为我目前在后端工作方面做得更好 我试图在某种程度上复制我自己网站的风格 https thomas smyth co uk https thomas smyth co uk 这是一个简单的
  • ZF3会话超时问题

    我一直面临与使用 Zend Framework 3 的会话超时相关的问题 会话在 5 10 分钟内过期 我使用了会话的默认代码 Zf3 框架在全局 php如下 Session configuration session config gt
  • 如何将 GOPATH 链接到 LiteIDE?

    我已经安装了 LiteIde 并导出GOROOT and GOPATH in my bashrc 当我使用 LiteIDE 时 自动完成工作正常 但它无法构建 运行我的代码 当我查看 管理 GOPATH 时 系统 GOPATH 框是空的 我
  • 相同的 RSA 密钥、相同的消息、不同的加密[重复]

    这个问题在这里已经有答案了 我生成私钥 公钥和一个小文本文件 openssl genrsa out priv pem openssl rsa out pub pem in priv pem pubout echo A gt plain tx
  • 如何在matplotlib图中的特定位置添加网格线?

    如何在 matplotlib 图中 y 轴的特定位置添加网格 是的 这很简单 使用set x y ticks的方法axes对象并正常切换网格 import matplotlib pyplot as plt fig ax plt subplo
  • 如何在已处理的异常上停止 PyCharm 的中断/停止/停止功能(即仅在 python 未处理的异常上中断)?

    我发现 PyCharm 停止处理我的所有异常 甚至是我正在处理的异常try except堵塞 我不希望它在那里中断 我正在处理并且可能期待一个错误 但我确实希望它停止并暂停执行所有其他异常 例如 以便我拥有程序状态并对其进行调试 如何做到这
  • kafka生产者API中的标头信息

    我有一个 json 有效负载 我想将其作为生成器 Api 中的标头发送 type record created version 1 orgId userId userName correlationId jobId 以上有效负载应作为标头发
  • 正则表达式删除空 标签

    我想要这样的空跨度标签 填充有 nbsp 和空格 要删除 span nbsp nbsp nbsp span 我尝试过使用这个正则表达式 但它需要调整 span nbsp s span preg replace span nbsp s spa
  • 识别 Formik FieldArray 中已删除(创建和修改)的项目

    想知道 Formik 是否有一个本地解决方案来识别添加和删除 和更新 FieldArray以形式 我这里有沙箱上的代码https codesandbox io s jn7x2m75o9 https codesandbox io s jn7x
  • 如何使用FacesContext.getCurrentInstance(),它返回null

    在过去的几天里 我一直在为网络应用程序的登录部分而苦苦挣扎 我已经可以使用 tomcat 上的 JDBCRealm 成功验证用户身份 通过从 sql 服务器数据库读取用户 现在我想发送某种反馈当用户的帐户被阻止或凭据不正确时 这就是我现在陷
  • 通过 geopandas 连接多个 shapefile

    我试图通过实现以下内容来组合多个形状文件 import geopandas as gpd import pandas as pd for i in range 10 56 interesting files Users m3105 Down
  • 在 Visual Studio 中更改目标构建目录

    我是 Visual Studio 的新手 我导入了一个由多个子项目组成的 Visual Studio 项目 我可以构建所有这些 但我不知道 IDE 在构建后将可执行文件放在哪里 如何从 Visual Studio 获取 设置项目的目标目录
  • 如何像Crashlytics和开源PLCrashReporter一样获取崩溃行和方法

    正如我提到的 我正在尝试恢复崩溃的线路以及发生崩溃的功能 我需要提到的是 我已经尝试了 AppDelegate 中的下一个代码 并且我得到了未符号化的堆栈和类以及引发的错误 NSSetUncaughtExceptionHandler unc
  • 伪造、嘲笑和存根有什么区别?

    我知道如何使用这些术语 但我想知道是否有可接受的定义faking mocking and stubbing用于单元测试 您如何为您的测试定义这些 描述一下您可能会使用每种方法的情况 以下是我如何使用它们 Fake 实现接口但包含固定数据且不
  • Web3 BatchRequest 总是返回未定义,我做错了什么?

    我正在尝试使用 web3 Batch 来一起调用代币余额 当我调用batch execute 时 它返回未定义的而不是已添加到批处理中的已解决的请求 有人可以告诉我我把事情搞砸的地方吗 这是我的代码 async generateContra