前一阵子,需求中有这样一个场景:
访问一个页面,而后须要封装为一个方法,这个方法须要返回访问这个页面的结果。大概把需求抽象一下就能够变成:一个方法 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()
这时候,咱们能够看到返回的是一个 pending 的 promise 对象。而后咱们加上神奇的 await:spa
await fn()
能够看到返回就是咱们的预期了。code
而后,咱们查阅文档看下 await 的介绍:对象
await 命令 正常状况下,await命令后面是一个 Promise 对象。若是不是,会被转成一个当即resolve的 Promise
对象。
这就不难理解为何这样写能够实现咱们的预期了。ip