Невозможно получить значение из синхронной функции, но можно получить значение из синхронной функции с помощью трюфеля.

Следующий асинхронный вызов функции возвращает значение общего количества голосов в переменной v правильно

return GlobalcontractInstance.totalVotesFor.call(candidateName).then(function(v) {
$("#" + div_id).html(v.toString());
$("#msg").html("");
});

Но следующая синхронная функция не возвращает значение в no_of_votes.

no_of_votes = GlobalcontractInstance.totalVotesFor.call(candidateName);
$("#" + div_id).html(JSON.stringify(no_of_votes));

Я не могу понять, почему так происходит? Как предпочтительнее вызывать функции смарт-контракта?

Ответы (1)

Не рекомендуется полагаться на синхронные функции. Например, в бета-версии web3 v1.0 их поддержка полностью удалена, а truffle никогда не поддерживал их в последних версиях.

Современные браузеры поддерживают async/await, и вы можете использовать транспилятор для поддержки старых версий.

no_of_votes = await GlobalcontractInstance.totalVotesFor.call(candidateName);
$("#" + div_id).html(JSON.stringify(no_of_votes));