Я пытаюсь запустить приведенный ниже код, чтобы получить переменные состояния, используя метод 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
Должен ли я использовать события ?
Выполнение вызова 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...