首页 > 解决方案 > 我无法获得从solidity 到javascript 的请求列表

问题描述

据我所知,我无法获得从solidity到javascript的结构数组,因此对来自javacript的每个请求发出单独的请求:

 const address = context.params.id;
  const campaign = Campaign(address);
  const requestCount = await campaign.methods.getRequestsCount().call();
  const donatorsCount = await campaign.methods.donatorsCount().call();
  // this returns: requests.count 4
  console.log("requests.count", requestCount);
  const requests = await Promise.all(
    Array(requestCount)
      .fill()  // I tried fill(0)
      .map((element, index) => {
        return campaign.methods.requests(index).call();
      })
  );
  console.log("requests", requests);

我有 4 个请求,但我总是只收到第一个请求

标签: javascriptpromisesolidity

解决方案


requestCount包含string4。_

而且因为它不是Number指定数组长度的类型,所以Array() 构造函数将它作为新创建的数组的一个元素(值“4”)。

解决方案:将值作为类型传递Number以创建一个 4 项数组。

Array(parseInt(requestCount))

除了循环遍历每个索引,您还可以创建一个返回整个数组的 Solidity 函数

function getRequests() external view returns (Request[] memory) {
    return requests;
}

并从 JS 调用它

const requests = await campaign.methods.getRequests().call();

推荐阅读