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 条评论
登录 后参与评论

相关文章

来自专栏Java后端生活

JDBC(二)通过Statement执行更新操作

数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语句

12450
来自专栏一枝花算不算浪漫

[数据库操作]Java中的JDBC的使用方法.

30680
来自专栏软件开发

JavaSE学习总结(九)—— Java访问数据库(JDBC)

一、JDBC简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关...

22650
来自专栏岑玉海

hbase源码系列(九)StoreFile存储格式

从这一章开始要讲Region Server这块的了,但是在讲Region Server这块之前得讲一下StoreFile,否则后面的不好讲下去,这块是基础,Re...

42350
来自专栏数据结构与算法

BZOJ1269: [AHOI2006]文本编辑器editor

Descriptio 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗? 为了明确任务目标,可可对“文本编辑器...

30270
来自专栏Java面试笔试题

JDBC能否处理Blob和Clob?

Blob是指二进制大对象(Binary Large Object),而Clob是指大字符对象(Character Large Objec),因此其中Blob是为...

31550
来自专栏用户2442861的专栏

Java对MySQL数据库进行连接、查询和修改

http://www.cnblogs.com/aniuer/archive/2012/09/10/2679241.html

10120
来自专栏DT乱“码”

数据库连接(直接用)

package com.sanqing.util; import java.sql.Connection; import java.sql.DriverMa...

19460
来自专栏Java开发

读取数据库时报java.sql.SQLException: 流已被关闭

使用Connection、Statement/PreparedStatement、ResultSet来取数据库信息:

15520
来自专栏大内老A

集成EntLib实现ASP.NET MVC的异常处理[续篇]

在《集成EntLib实现ASP.NET MVC的异常处理》我们实现采用EntLib的Exception Handling Application Block(E...

21090

扫码关注云+社区

领取腾讯云代金券