关于JavaScript中异步/等待的用法与理解

 更新时间:2020年11月18日 09:37:18   作者:标梵互动  
这篇文章主要给大家介绍了关于JavaScript中异步/等待的用法与理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

昨天更新的是“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异步/等待的用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Swiper.js实现移动端元素左右滑动

    Swiper.js实现移动端元素左右滑动

    这篇文章主要为大家详细介绍了Swiper.js实现移动端元素左右滑动 ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • JavaScript reduce和reduceRight详解

    JavaScript reduce和reduceRight详解

    这篇文章主要介绍了JavaScript reduce和reduceRight的高级用法详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • 关于JS中一维数组和二维数组互转问题

    关于JS中一维数组和二维数组互转问题

    这篇文章主要介绍了js中一维数组和二维数组互转,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 实例详解display:none与visible:hidden的区别

    实例详解display:none与visible:hidden的区别

    这篇文章主要介绍了实例详解display:none与visible:hidden的区别的相关资料,需要的朋友可以参考下
    2017-03-03
  • javaScript实现支付10秒倒计时

    javaScript实现支付10秒倒计时

    这篇文章主要为大家详细介绍了javaScript实现支付10秒倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • JavaScript基于原型链的继承

    JavaScript基于原型链的继承

    原型链是JavaScript中继承的主要方法。本文重点给大家介绍JavaScript基于原型链的继承,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-06-06
  • JavaScript实现彩虹文字效果的方法

    JavaScript实现彩虹文字效果的方法

    这篇文章主要介绍了JavaScript实现彩虹文字效果的方法,涉及javascript操作文字样式的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • JavaScript实现带有子菜单和控件的slider轮播图效果

    JavaScript实现带有子菜单和控件的slider轮播图效果

    本文通过实例代码给大家介绍了基于js实现带有子菜单和控件的slider轮播图效果,本文附有图片和示例代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-11-11
  • JS基于myFocus库实现各种功能的tab选项卡切换效果

    JS基于myFocus库实现各种功能的tab选项卡切换效果

    这篇文章主要介绍了JS基于myFocus库实现各种功能的tab选项卡切换效果,实例演示了JS实现tab嵌套显示及常用过度效果的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • JS面向对象的程序设计相关知识小结

    JS面向对象的程序设计相关知识小结

    这篇文章主要介绍了JS面向对象的程序设计,现在很多代码都是基于面向对象实现,需要的朋友可以参考下
    2018-05-05

最新评论