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