如何获取函数作用域外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
相关产品推荐
相关产品推荐

