时间:2021-05-25
昨天更新的是“JavaScript中的Promise使用详解”,其实也就是说了下基本用法和自己对Promise的理解,可能有错误之处,也欢迎指出。今天就说一说“JavaScript中的async/await的用法和理解”
JavaScript中异步/等待的用法和理解
编程语言中任意一个关键字都是有意义的,我们先从字面意思来理解。
1.async
async 是“异步”的简写,带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装。
async function test() { return 'hello word'}test();运行上面代码返回结果如下
2.await
await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。
我们看下面段代码
function test() { return new Promise(resolve => { setTimeout(() => resolve("hello word"), 2000); });}const result = test();console.log(result.then((val)=>{console.log(val)}));console.log('结束')我们以编辑器编辑器代码执行顺序来理下,
1.首先我们定义一个方法,这个方法返回Promise 对象,.then()函数两秒钟后返回调用成功。
2.接下来实例化test()函数。
3.调用result对象的then()函数,接收返回值,注意,这里是异步的
4.打印日志结束
我们运行代码,看结果
看到先打印“结束”,然后才打印的“hello word”,这就是异步,我们改造下代码
function test() { return new Promise(resolve => { setTimeout(() => resolve("hello word"), 2000); });}const result = await test();console.log(result);console.log('结束')用await关键字接test()函数,看这次返回结果
我们发现先打印“hello word”,然后才打印“结束”,由于test()造成的阻塞,console.log(‘结束')会等到两秒后执行。
再来说下优缺点
优点:相对于promise,async/await处理 then 的调用链,代码要清晰很多,几乎和同步代码一样。
缺点:滥用 await 可能会导致性能问题,因为 await 会阻塞代码。
总结
到此这篇关于JavaScript中异步/等待的用法与理解的文章就介绍到这了,更多相关JavaScript异步/等待的用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了javascript异步处理与Jquerydeferred对象用法。分享给大家供大家参考,具体如下:这是项目组老大整理的一些关于jquery异步处
Javascript的特点是异步,Javascript不能等待,如果你实现某件需要等待的事情,你不能停在那里一直等待结果回来,相反,底线是使用回调callbac
Ajax(asynchronousjavascriptandxml)异步的javascript和xml.是为了解决传统的web应用中"发送请求-等待响应"这种模
本文实例讲述了JavaScript定时器常见用法。分享给大家供大家参考,具体如下:定时器定时器在javascript中的作用1、制作动画2、异步操作3、函数缓冲
本文总结分析了Android中异步类AsyncTask用法。分享给大家供大家参考,具体如下:最近整理笔记的时候,看到有关AsyncTask不是很理解,重新疏导了