Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将以太坊web3 json对象转换为数组_Javascript_Arrays_Ethereum - Fatal编程技术网

Javascript将以太坊web3 json对象转换为数组

Javascript将以太坊web3 json对象转换为数组,javascript,arrays,ethereum,Javascript,Arrays,Ethereum,我正在与web3合作,试图从以太坊主网中提取实时数据。promise返回一个JSON对象,我想获取最后10个块的信息,并将该对象放入数组latest,这样我就可以使用类似于latest[0]的东西将其输出到其他地方。难度 每次我将块信息推入数组时,它似乎只是以一种奇怪的方式将其捆绑在一起,这样当我执行latest.length时,它返回为0 我想我可以用一本关于数组和对象的入门书,但任何信息都非常感谢 window.addEventListener('load', function() {

我正在与web3合作,试图从以太坊主网中提取实时数据。promise返回一个JSON对象,我想获取最后10个块的信息,并将该对象放入数组
latest
,这样我就可以使用类似于
latest[0]的东西将其输出到其他地方。难度

每次我将块信息推入数组时,它似乎只是以一种奇怪的方式将其捆绑在一起,这样当我执行
latest.length
时,它返回为
0

我想我可以用一本关于数组和对象的入门书,但任何信息都非常感谢

window.addEventListener('load', function() {

  //  sconsole.log('No Web3 Detected... using HTTP Provider')
  const web3 = new Web3(new Web3.providers.WebsocketProvider("wss://rinkeby.infura.io/ws"));
  console.log('Web3 Detected! ')
  window.web3 = new Web3(web3.currentProvider);

  if (typeof window.web3 !== 'undefined') {
    // You have a web3 browser! Continue below!
    //  startApp(web3);
    init()
    //alert("Web3");
  }
})

async function getArray() {
  latest = []
  await web3.eth.getBlockNumber(function(error, blockNumber) {
    for (var i = 0; i < 10; i++) {
      web3.eth.getBlock(blockNumber - i).then(obj => {
        latest.push(obj)
      })
    }
  })
  return latest
}

async function init() {
  await getArray().then(v => {
    console.log(v.length)
    console.log(v)
  })
}

在何时使用wait操作符和何时使用回调函数上似乎存在一些混淆,因为您试图同时使用这两个操作符

我已经将代码更改为仅使用promise版本和Wait操作符

  getArray = async () => {
    const blocknumber = await web3.eth.getBlockNumber()
    for (var i = 0; i < 10; i++) {
      const block = await web3.eth.getBlock(blocknumber - i)
      latest.push(block)
    }
    return latest
  }

请注意,这必须从
async
函数中调用,那么在
最新的.push(obj)
之前的
console.log(obj)
中得到什么呢?只需在上面添加输出就不存在
json对象了。太好了,很高兴知道-不确定该语句有多正确-我们如何自己测试此代码,是否需要在本地运行eth节点?不,我确实声明了它-但尝试迭代其中一项,如so
latest[0].难度
所以使用
等待
意味着我们不必再使用
然后
了?如果您使用的是承诺或
表格
对象,那么当您使用
等待
时,您就不会使用
然后
。相反,该值将返回给要将其设置为相等的变量(左侧)。如果不使用
await
运算符尝试执行此操作,那么变量中得到的是承诺,而不是期望的值。
  getArray = async () => {
    const blocknumber = await web3.eth.getBlockNumber()
    for (var i = 0; i < 10; i++) {
      const block = await web3.eth.getBlock(blocknumber - i)
      latest.push(block)
    }
    return latest
  }
  someAsyncFunctionWhereWeAreWorking = async () => {
    const blocks = await this.getArray()
    blocks.map(block => {
      //we can do things here to each item of the block
      console.log(block.difficulty)
    })
  }