专栏首页九彩拼盘的叨叨叨async/await 写法示例

async/await 写法示例

async/await 让写异步代码感觉像写同步代码。async/await 并不是 ES6 的一部分,但可以通过使用 Babel 来使用它。

async/await 一般和 Prmoise 一起使用。下面的代码是一个生成 Promise 对象的工具方法。

function doTask({id, success=true,time=100}){
  return new Promise(function (resolve, reject) {
    setTimeout(function(){// 模拟异步
      var msg
      if(success) {
        msg = `thing ${id} is done`
        console.log(msg)
        resolve(msg);
      } else {
        msg = `thing ${id} failed`
        console.error(msg)
        reject(msg)
      }
    }, time)
  })
}

多个串行操作

以 3 个为例。代码如下

async function doSerialTing() {
  await doTask({id:1})
  console.log('sth')
  await doTask({id:2, time: 1000})
  await doTask({id:3})
}

doSerialTing()

输出

thing 1 is done
sth
thing 2 is done
thing 3 is done

await doTask(...) 的返回值为 Promise 中 resolve 值。

自己试下点这里

多个并行操作

以 3 个为例。代码如下

async function doParallelTing() {
  var [res1, res2, res3] = await Promise.all([
      doTask( {id:1}),
      doTask( {id:2, time: 1000 }), 
      doTask( {id:3})
  ])
  console.log(res1,res2,res3)
}

doParallelTing()

输出

thing 1 is done
thing 3 is done
thing 2 is done
thing 1 is done thing 2 is done thing 3 is done

自己试下点这里

错误处理

async function doTasks() {
  try {
     await doTask({id:1, success:false})
     await doTask({id:2})
  }catch(e) {
    console.log(`error: ${e}`)
  }
}

doTasks()

或这么写

async function doTasks() {
  await doTask({id:1, success:false})
  await doTask({id:2})
}

doTasks().catch((e)=>{
   console.log(`error: ${e}`)
})

输出

thing 1 failed
error: thing 1 failed

自己试下点这里

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 优化网站用户体验的tip

    兼容性:Firfox6+, Safari5.1+,IE 10+。chrome不支持

    Joel
  • JavaScript 日期之某天的下一天是哪天

    解决如题所示的问题,其实只需解决某天所在的月份有几天的问题:如果该天是这个月的最后一天,则下一天为下个月1号;否则,下一天的天的值比该天的值大 1。解决某天所在...

    Joel
  • 扁平化设计开始流行啦~

    在最近几年里,我们发现软件和应用的界面快速的从立体,纹理化变为扁平,简洁化。这种变化趋势是普遍存在的,我们来花些时间来看看这些变化是如何发生的,以及这些变化产生...

    Joel
  • ERP Material deletion flag and CRM product archive status

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Jerry Wang
  • NIO复习(2):channel

    上篇学习了NIO的buffer,继续来学习channel,类图如下(注:为了不让图看起来太复杂,隐藏了一些中间的接口)

    菩提树下的杨过
  • 学习Python,is和==的本质区别你

    在Python中,is和==都是用来对两个对象进行比较判断的,但两者却有本质的区别。

    py3study
  • bert生成句向量

    BERT本质上是一个两段式的NLP模型。第一个阶段叫做:Pre-training,跟WordEmbedding类似,利用现有无标记的语料训练一个语言模型。第二个...

    DC童生
  • 基于OpenDaylight和OVSDB搭建VxLAN网络

    1 简介 本文主要介绍基于OpenDaylight子项目OVSDB中的southbound组件来搭建VxLAN网络,包括初始环境搭建和southbound Re...

    SDNLAB
  • 睡觉之后

    网络上对睡后收入的解释是:不需要花费多少时间和精力,也不需要照看,就可以自动获得的收入,所以也称“被动收入”。

    李才哥
  • 推荐系统丨YouTube召回模型设计

    随着互联网行业的高速发展,人们获取信息的方式越来越多。人们对信息获取的有效性和针对性的需求随之出现,推荐系统也应运而生。推荐系统就是互联网时代的一种信息检索工具...

    博文视点Broadview

扫码关注云+社区

领取腾讯云代金券