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

JavaScript中如何将async函数内的变量传入其他函数中使用

你遇到的问题本质有两个:

  • lblock是block()函数内部的局部变量,函数外部默认无法直接访问
  • block()是异步函数,调用后会立即返回,后续的pcsfactoryC.events.PairCreated执行时,block()里的区块查询逻辑还没完成,lblock还没被计算出来,就算提升变量作用域也会拿到空值。

方案1:把依赖lblock的逻辑整合到异步函数内部(最简洁)

直接把事件初始化逻辑放到异步函数里,等区块查询完成后再执行:

async function initBlockAndListener() {
  let getBlock = await web3.eth.getBlock('latest');
  console.log(getBlock['number']);
  let lblock = getBlock['number'] - 8;
  console.log(lblock);
  // 区块计算完成后再初始化事件监听
  pcsfactoryC.events.PairCreated({
    fromBlock: lblock
  })
}
initBlockAndListener();

方案2:拆分逻辑,通过返回值传递lblock

如果需要把区块计算和事件监听的逻辑拆分,可以把lblock作为异步函数的返回值,等待异步执行完成后再使用:

// 单独封装区块计算逻辑
async function getLBlock() {
  let getBlock = await web3.eth.getBlock('latest');
  return getBlock['number'] - 8;
}

// 调用方式1:async自执行函数包裹
(async () => {
  const lblock = await getLBlock();
  pcsfactoryC.events.PairCreated({
    fromBlock: lblock
  })
})()

// 调用方式2:使用.then链式调用
getLBlock().then(lblock => {
  pcsfactoryC.events.PairCreated({
    fromBlock: lblock
  })
})

注意不要直接把lblock定义为全局变量然后直接在外部使用,异步逻辑执行完成前变量还是undefined,必须等待异步查询完成后再使用lblock。

内容的提问来源于stack exchange,提问作者everything is wrong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:21:01