Доступ к переменным состояния Ethereum с помощью web3js (Java Script)

Я пытаюсь запустить приведенный ниже код, чтобы получить переменные состояния, используя метод getIdBytes смарт-контракта, и назначить его переменной массива java-скриптов, но, похоже, это не работает.

Все, что я могу сделать, это вывести возвращаемые значения с помощью console.log(return).

Может кто-нибудь указать мне в правильном направлении, пожалуйста?

var coreValues = ['Apple', 'Banana'];
console.log("Before call :"  + coreValues[1]);

if (get_flag)
{
contract3.methods.getIdBytes(index1, abstract_contract_address).call().then(function(result){
   for (var i = 0; i < 5; i++) {
  coreValues[i] =  result[i];
  console.log("Inside Function Call" + coreValues[i]);
  }
});

console.log("After Call :" + coreValues[0]);

Вот как выглядит результат.

Before call :Banana
After Call :Apple
Inside Function call : Steve
Inside Function call : Rogers
Inside Function call : Male
Inside Function call : 0987654
Inside Function call : 12/05/1980

Должен ли я использовать события ?

Ответы (1)

Выполнение вызова web3js является асинхронным, поэтому «После вызова» выполняется перед кодом внутри цикла.

Попробуй это:

var coreValues = ['Apple', 'Banana'];
console.log("Before call :"  + coreValues[1]);

if (get_flag) {
  contract3.methods.getIdBytes(index1, abstract_contract_address).call().then(function(result){
    for (var i = 0; i < 5; i++) {
      coreValues[i] =  result[i];
      console.log("Inside Function Call" + coreValues[i]);
    }
    console.log("End of Call :" + coreValues[0]);
    // continue with your logic here...
  });
}
console.log("Too early: " + coreValues[0]);

Другой вариант — использовать «ожидание»:

var coreValues = ['Apple', 'Banana'];
console.log("Before call :"  + coreValues[1]);

if (get_flag) {
  await contract3.methods.getIdBytes(index1, abstract_contract_address).call().then(function(result){
    for (var i = 0; i < 5; i++) {
      coreValues[i] =  result[i];
      console.log("Inside Function Call" + coreValues[i]);
    }
  });
}
console.log("Not too early: " + coreValues[0]);
// continue with your logic here...