Tengo una pregunta para ustedes. Tengo 2 contratos:
contract House {
uint public idHouse;
...
}
contract ArrayHouse {
House[] public arrayHouse;
function getHouse(uint n) returns(House){
if (n >= arrayHouse.length)
throw;
return arrayHouse[n];
}
}
Compilé y migré el contrato ArrayHouse al testrpc reseau. Luego, fui a la consola de trufas y probé el siguiente javascript:
casaArray=CasaArray.nuevo(...);
arrayHouse.then(function(inst1){meta=inst1;return meta.getHouse(0)}).then(function(inst2){return inst2.idHouse.call();})
Tuve el siguiente error:
TypeError: Cannot read property 'call' of undefined
at evalmachine.<anonymous>:1:84
at process._tickDomainCallback (internal/process/next_tick.js:129:7)
Me pregunto por qué no puedo acceder a un atributo (idHouse pública) de un elemento (House) de mi matriz (arrayHouse). Alguien tiene una idea?
Solo hago una conjetura, ya que no puedo probarlo en este momento, pero parece que la forma en que accede a su contrato puede estar causando el problema. Then() debe usarse en una función para ejecutar después de que se devuelva la promesa, mientras que lo está usando en una variable. Prueba algo como esto:
ArrayHouse.new({from: accountAddress});
//Or use ArrayHouse.deployed() ArrayHouse.at(accountAddress).getHouse(0).then(function(inst2){return inst2.idHouse.call(); })
getHouse
arroja error cuando n
es igual a arrayHouse.length
. Estás pasando 0
y la matriz está vacía, así que ... tienes una excepción.
Otra cosa es que idHouse
es solo un atributo, por lo que no puede llamarlo como si fuera un método.