Consola de trufas + javascript

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:

  1. casaArray=CasaArray.nuevo(...);

  2. 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?

Respuestas (2)

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(); })

getHousearroja error cuando nes igual a arrayHouse.length. Estás pasando 0y la matriz está vacía, así que ... tienes una excepción.

Otra cosa es que idHousees solo un atributo, por lo que no puede llamarlo como si fuera un método.