频道栏目
首页 > 资讯 > HTML/CSS > 正文

async及await的运行环境及使用教程

17-12-06        来源:[db:作者]  
收藏   我要投稿

运行环境

node7以上支持此方法

chrome55以上支持此特性,一般我们用于node开发中

async简介

async其实是promise的语法糖,被async标记过的方法,返回promise对象

async的定义如下:

async function name([param[, param[, ... param]]]) { statements }

返回AsyncFunction个人理解为就是一个promise实例

当这个 async 函数返回一个值时,Promise 的 resolve 方法将会处理这个值;当 async 函数抛出异常时,Promise 的 reject 方法将处理这个异常值。

await简介

await一般需要配合async标记的函数使用

await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。

await标记的方法调用返回的值其实就是promise的resolve 方法返回的

若 Promise 正常处理(fulfilled),其处理结果作为 await 表达式的值,继续执行 async function。

若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。

另外,如果 await 操作符后的表达式的值不是一个 Promise,那么该值将被转换为一个已正常处理的 Promise。

官方文档案例

正常的操作

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function add1(x) {
  var a = resolveAfter2Seconds(20);
  var b = resolveAfter2Seconds(30);
  return x + await a + await b;
}

add1(10).then(v => {
  console.log(v);  // prints 60 after 2 seconds.
});

async function add2(x) {
  var a = await resolveAfter2Seconds(20);
  var b = await resolveAfter2Seconds(30);
  return x + a + b;
}

add2(10).then(v => {
  console.log(v);  // prints 60 after 4 seconds.
});

有异常的情况

async function f3() {
  try {
    //如果调用promise的reject方法,则会被异常捕获
    var z = await Promise.reject(30);
  } catch (e) {
    console.log(e); // 30
  }
}
f3();

今天写了一个模拟websocket的接口,代码中使用到了该特性,直接看源码

//websocket监听消息
ws.on('message', async function (message) {
    //注意匿名函数上使用了async标记,否则报错
    var stockRequest = JSON.parse(message);//根据请求过来的数据来更新。
    console.log("收到消息", stockRequest);
    let result = await startSendMessage();
});
/**
 * 发送消息
 */
async function startSendMessage(){
    for(let i=0,leni=PROVINCE_ARRAY.length;i {
        setTimeout(() => {
            obj['result'] = getResult();
            wsInstance.send(JSON.stringify(obj));
            resolve("OK");
        }, timeStep);
    });
}
相关TAG标签
上一篇:微信公众平台使用JSSDK网页调起扫码并获取扫码数据(PHP实现)
下一篇:Sqoop脚本开发规范讲解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站