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

如何获取函数作用域外Promise返回值并判断是否等于2

问题原因

isCodeExists 是返回Promise的异步方法,你之前写法里赋值给h的是Promise实例本身,不是异步请求拿到的实际返回值。JS异步任务不会阻塞同步代码执行,所以你没法在Promise回调的外层作用域同步拿到结果做比对,所有依赖异步返回值的逻辑,都必须在异步结果返回之后再执行。


实现方案

1. 直接在then回调中处理比对逻辑

把所有依赖返回值res的逻辑全部放到then的回调函数里执行即可:

isCodeExists(userInput).then(res => {
  // 在这里直接做值比对
  if (res === 2) {
    // 返回值等于2时的业务逻辑
    console.log('校验通过')
  } else {
    // 返回值不等于2时的业务逻辑
    console.log('校验失败')
  }
})

2. 用async/await语法简化写法

如果觉得回调写法不直观,可以在async标记的函数内用await等待Promise返回结果,写法和同步逻辑一致:

// await 必须在async函数内使用
async function validateCode() {
  // 等待异步请求返回结果,赋值给res
  const res = await isCodeExists(userInput)
  // 直接做比对即可
  if (res === 2) {
    console.log('校验通过')
  } else {
    console.log('校验失败')
  }
}

// 调用校验函数
validateCode()

注意事项

  • 永远不要尝试在then回调、async函数的外层作用域直接读取异步返回值,同步代码执行时异步请求还没完成,拿到的只会是undefined或者Promise实例,不可能拿到实际结果。
  • 如果后续还有其他依赖比对结果的逻辑,要么顺着Promise链往下写,要么全部放到async函数里await之后执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:36:26