三分钟学会用ES7中的Async/Await进行异步编程


Posted in Javascript onJune 14, 2018

本文介绍了三分钟学会用ES7中的Async/Await进行异步编程,分享给大家,具体如下:

Async/Await基本规则

  1. async 表示这是一个async函数,await只能用在这个函数里面。
  2. await 表示在这里等待promise返回结果了,再继续执行。
  3. await 后面跟着的应该是一个promise对象(当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了…)

一个Async/Await例子

Async/Await应该是目前最简单的异步方案了,首先来看个例子。

这里我们要实现一个暂停功能,输入N毫秒,则停顿N毫秒后才继续往下执行。

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve();
    }, time);
  })
};

var start = async function () {
  // 在这里使用起来就像同步代码那样直观
  console.log('start');
  await sleep(3000);
  console.log('end');
};

start();

控制台先输出start,稍等3秒后,输出了end。

获得返回值

await等待的虽然是promise对象,但不必写.then(..),直接可以得到返回值。

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      // 返回 ‘ok'
      resolve('ok');
    }, time);
  })
};

var start = async function () {
  let result = await sleep(3000);
  console.log(result); // 收到 ‘ok'
};

捕捉错误

既然.then(..)不用写了,那么.catch(..)也不用写,可以直接用标准的try catch语法捕捉错误。

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      // 模拟出错了,返回 ‘error'
      reject('error');
    }, time);
  })
};

var start = async function () {
  try {
    console.log('start');
    await sleep(3000); // 这里得到了一个返回错误
    
    // 所以以下代码不会被执行了
    console.log('end');
  } catch (err) {
    console.log(err); // 这里捕捉到错误 `error`
  }
};

循环多个await

await看起来就像是同步代码,所以可以理所当然的写在for循环里,不必担心以往需要闭包才能解决的问题。

..省略以上代码

var start = async function () {
  for (var i = 1; i <= 10; i++) {
    console.log(`当前是第${i}次等待..`);
    await sleep(1000);
  }
};

值得注意的是,await必须在async函数的上下文中的。

..省略以上代码

let 一到十 = [1,2,3,4,5,6,7,8,9,10];

// 错误示范
一到十.forEach(function (v) {
  console.log(`当前是第${v}次等待..`);
  await sleep(1000); // 错误!! await只能在async函数中运行
});

// 正确示范
for(var v of 一到十) {
  console.log(`当前是第${v}次等待..`);
  await sleep(1000); // 正确, for循环的上下文还在async函数中
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
JS实现适合于后台使用的动画折叠菜单效果
Sep 21 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
基于javascript html5实现多文件上传
Mar 03 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 Javascript
JS中的模糊查询功能
Dec 08 Javascript
详解React中setState回调函数
Jun 14 #Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 #Javascript
Vue.js添加组件操作示例
Jun 13 #Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
Jun 13 #Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 #Javascript
ES6与CommonJS中的模块处理的区别
Jun 13 #Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 #Javascript
You might like
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
Django自定义认证方式用法示例
2017/06/23 Python
python实现电脑自动关机
2018/06/20 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python selenium操作cookie的实现
2020/03/18 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
大专自我鉴定范文
2013/10/01 职场文书
艺术爱好者的自我评价分享
2013/10/08 职场文书
小学教师办公室制度
2014/02/03 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
银行求职自荐信范文
2015/03/04 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript