1

I have a question for you guys. I have 2 contracts:

contract House { uint public idHouse; ... } contract ArrayHouse { House[] public arrayHouse; function getHouse(uint n) returns(House){ if (n >= arrayHouse.length) throw; return arrayHouse[n]; } } 

I compiled and migrated the contract ArrayHouse to the testrpc reseau. Then, I went to truffle console and tried the following javascript:

  1. arrayHouse=ArrayHouse.new(...);

  2. arrayHouse.then(function(inst1){meta=inst1;return meta.getHouse(0)}).then(function(inst2){return inst2.idHouse.call();})

I got the following error:

TypeError: Cannot read property 'call' of undefined at evalmachine.<anonymous>:1:84 at process._tickDomainCallback (internal/process/next_tick.js:129:7) 

I wonder why I cannot access to the an attribute(public idHouse) of an element(House) of my array(arrayHouse). Anyone has an idea?

2 Answers 2

1

Only making a guess as I cannot test it at the moment but it seems the way access your contract may be causing the issue. Then() should be used on a function to execute after the promise is returned, whereas you are using it on a variable. Try something like this:

ArrayHouse.new({from: accountAddress});

//Or use ArrayHouse.deployed() ArrayHouse.at(accountAddress).getHouse(0).then(function(inst2){return inst2.idHouse.call(); })

0

getHouse throws error when n is equal to arrayHouse.length. You're passing 0 and array is empty so.. you have an exception being thrown.

Other thing is that idHouse is just an attribute, so you can't call it as it was a method.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.