前一阵子,需求中有这样一个场景:
访问一个页面,然后需要封装为一个方法,这个方法需要返回访问这个页面的结果。大概把需求抽象一下就可以变成:一个方法 fn 需要返回一个异步的结果。直观的用代码体现:
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:
await fn()
可以看到返回就是我们的预期了。
然后,我们查阅文档看下 await 的介绍:
await 命令 正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise
对象。
这就不难理解为什么这样写可以实现我们的预期了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。