async及await的运行环境及使用教程
程序员文章站
2022-04-05 08:48:57
运行环境
node7以上支持此方法
chrome55以上支持此特性,一般我们用于node开发中
async简介
async其实是promise的语法糖,被async标记过的...
运行环境
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); }); } ;i++){>
下一篇: 对漂亮mm态度就是么搞笑
推荐阅读
-
浅析Linux中使用nohup及screen运行后台任务的示例和区别
-
java环境配置不成功的原因(附java环境搭建及配置教程)
-
平板电脑运行慢卡CPU使用率100%的可能原因及解决方法
-
在Vultr VPS主机上安装使用Windows Server的教程及评测
-
SQL2005 自动备份及文件 自动同步到网络上的主机上 -Allway Syn软件使用教程
-
160WiFi无线路由wifi共享软件下载及简单的使用教程
-
babel的使用及安装配置教程
-
Centos服务器上NFS灾备环境及KVM的搭建及使用
-
Ubuntu环境下SSH的安装及使用详解
-
jquery append()方法教程与html()方法教程的区别及使用介绍