You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问getBlockByHeight返回的Promise中包含的Block对象的hash属性

问题原因

你调用getBlockByHeight返回的是Promise异步对象,不是直接返回查询到的Block实例,Promise本身没有hash属性,所以直接取值会返回undefined。你控制台看到的是pending状态已被resolve后的Promise打印结果,实际代码运行到previousBlock.hash时,要么Promise还没执行完成,要么你没有主动获取Promise resolve后的值。


解决方法1:使用async/await语法(更简洁)

给你调用这段逻辑的外层函数加上async关键字,调用方法前加await等待Promise执行完成,就能直接拿到Block对象:

// 外层函数加async修饰,如果是类方法写法为 async validateBlock(block) {...}
async function validateBlock(block) {
  // 加await等待Promise resolve,直接拿到Block实例
  let previousBlock = await self.getBlockByHeight(block.height - 1);
  // 现在可以正常访问属性,加可选链?.可避免查询结果为null时报错
  let preBlockHash = previousBlock?.hash;
  // 后续验证逻辑
}

解决方法2:使用.then链式回调

如果你不想修改外层函数的async修饰,也可以用Promise自带的.then方法获取结果:

self.getBlockByHeight(block.height - 1)
  .then(previousBlock => {
    // 回调里拿到的previousBlock就是Block实例
    let preBlockHash = previousBlock?.hash;
    // 后续验证逻辑写在这个回调内部
  })
  .catch(err => {
    // 可在这里捕获异步操作抛出的错误
    console.log('查询区块出错:', err)
  })

内容的提问来源于stack exchange,提问作者Darragh Cahill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:15:04