async/await使用心得
来源:互联网 发布:mac壁纸软件推荐 编辑:程序博客网 时间:2024/06/08 04:07
运行环境
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<leni;i++){ for(let j=0,lenj=RESOURCE_ARRAY.length;j<lenj;j++){ var obj={} wsInstance.send(JSON.stringify(obj)); await sendResult(obj); } } return true}/** * 发送结果 * @param {object} 发送的结果 */function sendResult(obj){ let timeStep=randomInterval(1000,4000); return new Promise(resolve => { setTimeout(() => { obj['result'] = getResult(); wsInstance.send(JSON.stringify(obj)); resolve("OK"); }, timeStep); });}
参考资料
理解 JavaScript 的 async/await
MDN async标记说明
MDN await标记说明
阅读全文
0 0
- async/await使用心得
- U3d 使用 异步 async await
- Async and await的使用
- Promise 、Async/Await的使用
- Promise、Async/Await的使用
- await-async
- async await
- async/await
- async&await
- Async/Await
- async/await
- async/await
- async/await
- async/await
- async/await
- async/await
- async/await
- async/await
- FASTX-Toolkit安装在指定目录下
- 【Scikit-Learn 中文文档】随机投影
- 安装MySQL , 进度卡在Starting server
- 1.对象导论---java编程思想(学习笔记)
- 蓝桥杯 算法训练 大小写转换
- async/await使用心得
- 20171203:数组拷贝、三种重要排序(冒泡、插入、快排)、二维数组的学习
- Python 从入门到实践 5-8 课后习题
- 阿里云安装mysql初始化的时候出现如下错误,以及解决方法
- 【Scikit-Learn 中文文档】内核近似
- Android IOS 移动端前端框架对比——framework7,SUI,MUI框架——React Native和Vuejs
- 欢迎使用CSDN-markdown编辑器
- Lintcode:Fizz Buzz 问题
- 【Scikit-Learn 中文文档】成对的矩阵, 类别和核函数