Следующий асинхронный вызов функции возвращает значение общего количества голосов в переменной 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));
Я не могу понять, почему так происходит? Как предпочтительнее вызывать функции смарт-контракта?
Не рекомендуется полагаться на синхронные функции. Например, в бета-версии web3 v1.0 их поддержка полностью удалена, а truffle никогда не поддерживал их в последних версиях.
Современные браузеры поддерживают async/await, и вы можете использовать транспилятор для поддержки старых версий.
no_of_votes = await GlobalcontractInstance.totalVotesFor.call(candidateName);
$("#" + div_id).html(JSON.stringify(no_of_votes));