No se puede acceder a la variable pública (devuelve nulo)

Soy bastante nuevo en la programación y me enfrento a un problema en el que no puedo acceder a una variable pública desde un contrato.

En el contrato, he declarado la siguiente variable pública:

uint public numFoodInfos;

En JS trato de llamar a esta variable:

contractAdressF2F = "...";
ABIArrayF2F = ...;
dataF2F = "...";
myContractF2F = web3.eth.contract(ABIArrayF2F).at(contractAdressF2F);

myContractF2F.numFoodInfos.call(function (error, result) {
    if (!error)
        console.log(result.toNumber())
    else
        console.log(error);
});

Sin embargo, esto devuelve 'nulo'.

¿Alguien ve el problema aquí? Leí que las variables públicas deberían generar una función getter automáticamente.

FYI, estoy usando el marco de meteoritos. Otras funciones personalizadas del mismo contrato funcionan...

Respuestas (1)

Intente llamar a esa variable usando paréntesis como este:

myContractF2F.numFoodInfos().call(function (error, result) {
    if (!error)
        console.log(result.toNumber())
    else
        console.log(error);
});

La razón por la que necesitamos agregar paréntesis se explica aquí: https://solidity.readthedocs.io/en/latest/contracts.html#getter-functions (cuando hace pública una variable de estado, el compilador genera automáticamente una función getter como descrito en la documentación)

Agregué el paréntesis como sugirió, pero aparece el siguiente error: inpage.js: 217 Error no detectado: el objeto MetaMask Web3 no admite métodos sincrónicos como eth_call sin un parámetro de devolución de llamada. Consulte github.com/MetaMask/faq/blob/master/… para obtener más información.