que yo sepa, no puedo obtener una matriz de estructuras desde solidity hasta javascript, así que haga una solicitud individual para cada solicitud de 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);Tengo 4 solicitudes pero siempre recibo solo la primera solicitud
requestCount contiene el valor de string 4 .
Y debido a que no es un tipo de Number que especifica la longitud de la matriz, el constructor Array() lo toma como un elemento (valor "4") de la matriz recién creada.
Solución : pase el valor como tipo Number para crear una matriz de 4 elementos.
Array(parseInt(requestCount))En lugar de recorrer cada índice, también puede crear una función de Solidez que devuelva la matriz completa
function getRequests() external view returns (Request[] memory) { return requests; }y llamarlo desde JS
const requests = await campaign.methods.getRequests().call();