Сохранить тег результатов контракта в переменной

У меня есть константа web3, которая выглядит так.

const test = contract_instance.methods.getPost(15).call().then(console.log);

Это возвращает такие результаты.

Result {
  '0': '2017-08-28',
  '1': '19:18:04.986593',
  '2': '07:17:00',
  '3': '11112323',
  '4': '12',
  date: '2017-08-28',
  login_time: '19:18:04.986593',
  logout_time: '07:17:00',
  login_device_id: '11112323',
  user_id: '12' }

Теперь, когда я хочу использовать консольный тег через console.log(test[0]); это возвращает undefined. Мой подход заключается в том, чтобы хранить каждый тег результата в отдельной переменной. Нужно какое-то предложение.


person user7421798    schedule 30.10.2017    source источник


Ответы (2)


then() принимает функцию в качестве аргумента, которая вызывается при выполнении обещания. Затем вы можете добавить значение в массив, например:

var results = []
contract_instance.methods.getPost(15).call().then(function(value){
   console.log(value)
   results.push(value)
});

results[0] будет тогда объектом результата, который вы ищете, а results[0]['0'] даст вам, например, дату «2017-08-28».

person rival    schedule 30.10.2017
comment
Да, это работает внутри экземпляра, но если я хочу утешить это вне экземпляра, он не показывает данные. Просто показываю пустую фигурную скобку. Спасибо большое, дорогой. - person user7421798; 31.10.2017

При объединении вызовов с .then(...) возвращаемое значение имеет тип Promise, а не объект Result, который вы ожидаете (и то, что написано в консоли), и к нему нельзя получить доступ по индексу. См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then для получения дополнительной информации.

person rival    schedule 30.10.2017
comment
Итак, каким именно образом можно приблизиться к цели. Я совершенно новичок в web3, узле и контракте - person user7421798; 30.10.2017