С помощью Solidity и Web3, когда я пытаюсь выполнить myEvent.get (), все, что я получаю, это myEvent: undefined - PullRequest
0 голосов
/ 01 мая 2018

Вот часть моего сценария JS, где я получаю событие:

    EthProj.Message({}, { fromBlock: 0, toBlock: 'latest' }).get((error, eventResult) => {
            if (error)
                console.log('Error in setEvent event handler: ' + error);
            else
                console.log('setEvent: ' + JSON.stringify(eventResult.args));
        });
    }

А вот мой контрактный скрипт:

pragma solidity ^0.4.18;

contract EthProj {

    string fName;
    string age;

    event Message(string name, string age);

    function setMessage(string _fName, string _age) public {
        fName = _fName;
        age = _age;

        emit Message(_fName, _age);
    }

    function getName() public constant returns (string) {
        return (fName);
    }

    function getMessage() public constant returns (string) {
        return (age);
    }
}

Когда я вызываю setMessage, я получаю неопределенное значение. Я понятия не имею, что я делаю не так. Кто-нибудь может помочь? Я не получаю события должным образом, или я просто не устанавливаю их вообще?

1 Ответ

0 голосов
/ 01 мая 2018

Вы должны начать watch на событии, прежде чем что-либо будет возвращено. Пока watch работает, вы можете получать новые события по мере их поступления или вы можете повторно получать события, используя get.

var events = EthProj.Message({}, { fromBlock: 0, toBlock: 'latest' });
events.watch((error, results) => {
  console.log(results); // Will show a single event object
});
events.get((error, eventResult) => {
  if (error)
    console.log('Error in setEvent event handler: ' + error);
  else
    console.log('Event count: ' + eventResult.length); // Notice object returned is an array
    eventResult.forEach(element => console.log('setEvent: ' + JSON.stringify(element)));
});
...