同步函数 return 一个异步结果

前一阵子,需求中有这样一个场景:
访问一个页面,而后须要封装为一个方法,这个方法须要返回访问这个页面的结果。大概把需求抽象一下就能够变成:一个方法 fn 须要返回一个异步的结果。直观的用代码体现:promise

function fn(){
  setTimeout(()=>{
    return 5
  },200)
}
fn()

若是直接这样写,能够看到返回的是 undefined。由于 fn 自己并无返回值。代码中的 return 其实是异步回调的返回值,没有什么意义。
那我试着用 promise 来包装一下这个异步的过程:异步

function fn(){
  let p = new Promise(res=>{
    setTimeout(()=>{
      res(5)
    },200)
  })
  return p 
}
fn()

clipboard.png

这时候,咱们能够看到返回的是一个 pending 的 promise 对象。而后咱们加上神奇的 await:spa

await fn()

clipboard.png

能够看到返回就是咱们的预期了。code

而后,咱们查阅文档看下 await 的介绍:对象

await 命令 正常状况下,await命令后面是一个 Promise 对象。若是不是,会被转成一个当即resolve的 Promise
对象。

这就不难理解为何这样写能够实现咱们的预期了。ip

相关文章
相关标签/搜索