资讯专栏INFORMATION COLUMN

同步函数 return 一个异步结果

oneasp / 2602人阅读

摘要:前一阵子,需求中有这样一个场景访问一个页面,然后需要封装为一个方法,这个方法需要返回访问这个页面的结果。大概把需求抽象一下就可以变成一个方法需要返回一个异步的结果。如果不是,会被转成一个立即的对象。

前一阵子,需求中有这样一个场景:
访问一个页面,然后需要封装为一个方法,这个方法需要返回访问这个页面的结果。大概把需求抽象一下就可以变成:一个方法 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
对象。

这就不难理解为什么这样写可以实现我们的预期了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96968.html

相关文章

  • js学习之异步处理

    摘要:学习开发,无论是前端开发还是都避免不了要接触异步编程这个问题就和其它大多数以多线程同步为主的编程语言不同的主要设计是单线程异步模型。由于异步编程可以实现非阻塞的调用效果,引入异步编程自然就是顺理成章的事情了。 学习js开发,无论是前端开发还是node.js,都避免不了要接触异步编程这个问题,就和其它大多数以多线程同步为主的编程语言不同,js的主要设计是单线程异步模型。正因为js天生的与...

    VioletJack 评论0 收藏0
  • 浅析JavaScript异步

    摘要:回调函数,一般在同步情境下是最后执行的,而在异步情境下有可能不执行,因为事件没有被触发或者条件不满足。同步方式请求异步同步请求当请求开始发送时,浏览器事件线程通知主线程,让线程发送数据请求,主线程收到 一直以来都知道JavaScript是一门单线程语言,在笔试过程中不断的遇到一些输出结果的问题,考量的是对异步编程掌握情况。一般被问到异步的时候脑子里第一反应就是Ajax,setTimse...

    Tangpj 评论0 收藏0
  • JavaScript 异步进化史

    摘要:签订协议的两方分别是异步接口和。在异步函数中,使用异常捕获的方案,代替了的异常捕获的方案。需要注意的是,在异步函数中使异步函数用时要使用,不然异步函会被同步执行。 同步与异步 通常,代码是由上往下依次执行的。如果有多个任务,就必需排队,前一个任务完成,后一个任务才会执行。这种执行模式称之为: 同步(synchronous) 。新手容易把计算机用语中的同步,和日常用语中的同步弄混淆。如,...

    luzhuqun 评论0 收藏0
  • 理解async/await

    摘要:所谓异步,就是调用在发出后,这个调用就直接返回了,调用者不会立即得到结果,但是不会阻塞,可以继续执行后续操作,而被调用者执行得到结果后通过状态事件来通知调用者使用回调函数来处理这个结果。另外状态的回调函数是可省略的。 首先明确一个问题,为什么 Node.js 需要异步编程? JavaScript 是单线程的,在发出一个调用时,在没有得到结果之前,该调用就不返回,意思就是调用者主动等待...

    luodongseu 评论0 收藏0
  • 《Node.js设计模式》Node.js基本模式

    摘要:回调函数是在异步操作完成后传播其操作结果的函数,总是用来替代同步操作的返回指令。下面的图片显示了中事件循环过程当异步操作完成时,执行权就会交给这个异步操作开始的地方,即回调函数。 本系列文章为《Node.js Design Patterns Second Edition》的原文翻译和读书笔记,在GitHub连载更新,同步翻译版链接。 欢迎关注我的专栏,之后的博文将在专栏同步: Enc...

    Seay 评论0 收藏0
  • async/await 更好的异步解决方案

    摘要:大家都一直在尝试使用更好的方案来解决这些问题。这是一个用同步的思维来解决异步问题的方案。当我们发出了请求,并不会等待响应结果,而是会继续执行后面的代码,响应结果的处理在之后的事件循环中解决。我们可以用一个两人问答的场景来比喻异步与同步。 在实际开发中总会遇到许多异步的问题,最常见的场景便是接口请求之后一定要等一段时间才能得到结果,如果遇到多个接口前后依赖,那么问题就变得复杂。大家都一直...

    Ali_ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<