当前位置:首页 > 财经

回调函数 JS异步编程,回调函数与promise

Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件更合理、更强大。它最初是由社区提出并实现的,ES6将其写入语言标准,统一其用法,并在本地提供

承诺

对象。

在ES6之前,Java中的异步编程分为三类:DOM事件(比如onclick)、网络请求(比如ajax)、定时器(setTimeout/setInterval)。它们都使用回调函数进行异步调用。回调函数嵌套在回调函数中时,即使是多层回调,编码也不够直观。通过使用Promise,可以通过同步编码实现异步调用。

1.多层回调:使用setTimeout()函数执行三层嵌套异步回调,编码不直观

1函数async(){

2 setTimeout(函数(){ //回调函数1

3 console . log(1);

Settimeout(函数(){//回调函数2

5 console . log(2);

6 setTimeout(函数(){ //回调函数2

7 console . log(3);

8 },1000);

9 },1000);

10 },1000)

11 }

12

13 async();

14

15 //通话结果:1秒后打印1,2秒后打印2,3秒后打印3

2.promise:按照同步顺序编写代码,以便执行3次异步回调

使用return new Promise(),如果承诺包含异步调用(setTimeout),则在异步调用中执行resolve()之前,不会执行then函数。

1个新承诺(功能(解决、拒绝){

2 //立即执行

3 console . log(' new promise ');

4 setTimeout(() = >;{//回调函数1

5 console . log(11);//11

6决心(12);//返回值给下一个then函数

7 }, 1000);

8 }).然后(function(value){ //回调函数2

9 //在最后一次承诺解决后执行()

10 console.log(值);//12

11退回新承诺(功能(解决、拒绝){

12 setTimeout(() = >;{

13 console . log(21);//21

14决心(22);

15 }, 1000);

16 });

17 }).然后(function(value){ //回调函数3

18 //最后一次承诺解决后执行()

19 console.log(值);//22

20 setTimeout(() = >;{

21 console . log(31);//31

22 }, 1000);

23 });

24

25 //执行结果:立即打印新承诺,1s后11/12,2s后21/22,3s后31

3.如果在then的回调函数中没有声明性返回new Promise();那么return会自动返回一个新的承诺,这样那么函数就可以连锁执行了。

return自动返回的承诺中没有异步操作(setTimeout不在承诺中),所以立即执行then函数。

可以参考MDN中关于then返回值的描述:https://developer . Mozilla . org/zh-cn/docs/web/Java/reference/global _ objects/promise/then

1个新承诺(功能(解决、拒绝){

2 //立即执行

3 console . log(' new promise ');

4 setTimeout(() = >;{//回调函数1

5 console . log(11);//11

6决心(12);//返回值给下一个then函数

7 }, 1000);

8 }).然后(function(value){ //回调函数2

9 //在最后一次承诺解决后执行()

10 console.log(值);//12

11 setTimeout(() = >;{

12 console . log(21);//21

13 }, 1000);

14回22;

15 }).然后(function(value){ //回调函数3

16 //在最后一次承诺解决后执行()

17 console.log(值);//22

18 setTimeout(() = >;{

19 console . log(31);//31

20 }, 1000);

21 });

22

23 //执行结果:立即打印新承诺,1s后11/12/22,2s后21/31

4.异步编程原理:

JS是单线程的,也就是说它的执行栈是单线程的(也就是Java引擎的线程),称为主线程。JS会创建一个类似while (true)的循环,每次执行循环体的过程叫做Tick。每个Tick进程都是检查任务队列中是否有要处理的任务(DOM事件/网络请求/定时器的回调函数),如果有,则取出相关回调函数,放入执行栈,由主线程执行。

异步操作向任务队列添加相关回调。不同的异步操作在不同的时间被添加到任务队列中。onclick由浏览器内核的DOM Binding模块处理。当事件被触发时,回调函数将被立即添加到任务队列中。SetTimeout会被浏览器内核中的定时器模块延迟,时间到了会在任务队列中加入回调函数。Ajax由浏览器内核的网络模块处理,回调在网络请求返回后加入任务队列。

浏览器内核实现允许多个线程异步执行。除了Java引擎线程,还有事件触发进程、定时器触发进程、http请求线程等。它们不会与Java引擎线程相互影响,也不会导致阻塞。即Java引擎的线程被阻塞后,事件仍然会被触发,但只有事件的回调函数不能被添加到任务队列中,也不能从任务队列添加到执行堆栈中。

异步原理参考环节:https://blog.csdn.net/qdq2014/article/details/72383725/

原地址:https://www.cnblogs.com/shuqiao/p/10040885.html

工作

1.《回调函数 JS异步编程,回调函数与promise》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《回调函数 JS异步编程,回调函数与promise》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1034220.html

上一篇

黑市几千元可查个人流水 还原事发经过及背后真相!

下一篇

怎么录屏小米 轻松教你两种小米手机的录屏方法,方法超简单!

hlookup 你会用HLOOKUP函数吗?

  • hlookup 你会用HLOOKUP函数吗?
  • hlookup 你会用HLOOKUP函数吗?
  • hlookup 你会用HLOOKUP函数吗?

countifs函数怎么用 excel函数应用:怎么用函数公式快速进行非重复计数

  • countifs函数怎么用 excel函数应用:怎么用函数公式快速进行非重复计数
  • countifs函数怎么用 excel函数应用:怎么用函数公式快速进行非重复计数
  • countifs函数怎么用 excel函数应用:怎么用函数公式快速进行非重复计数
双11咋买更优惠 用函数模型帮妈妈做攻略

双11咋买更优惠 用函数模型帮妈妈做攻略

关注店铺领取10元优惠券,与三个朋友分享链接1000元以上减150元,“双11”购物跨店津贴400元以上减50元,红包存钱卡可领取91元...那么问题来了:原价328元的百褶裙最低价是多少?如何以更好的价格购买?在今年“双...

ln的运算法则 大学高等数学:第二章第三讲导数四则运算及复合函数微分法则

ln的运算法则 大学高等数学:第二章第三讲导数四则运算及复合函数微分法则

对于基本初等函数的导数,一定要熟悉。这是高中学的一个知识点。对于基本初等函数和复合函数的导数,关键是适当选取中间变量,将给定的初等函数分解成基本初等函数的复合或四次运算。复合函数求导时,首先要导出中间变量,自变量要乘以中间变量,这样每一步都是基本初等函数的求导。(2)解:y ' =-sin(...

燕化高新 从立足国内到逐鹿全球 中石化挺进世界一流能源化工公司队列

  • 燕化高新 从立足国内到逐鹿全球 中石化挺进世界一流能源化工公司队列
  • 燕化高新 从立足国内到逐鹿全球 中石化挺进世界一流能源化工公司队列
  • 燕化高新 从立足国内到逐鹿全球 中石化挺进世界一流能源化工公司队列
二次函数图像怎么画 【数学试讲】《二次函数的图像和性质》名师试讲示范+试讲稿!

二次函数图像怎么画 【数学试讲】《二次函数的图像和性质》名师试讲示范+试讲稿!

每天更新中小学的语言、人数、语音、美颜、幼儿园试讲、讲座访谈、教案。演示音频由17所学校的教师录制。欢迎大家关注和支持! 二次函数的图像和性质 这位著名的老师演示了音频 每天21: 00准时更新 试记二次函数的象和性质 教学过程: 1.复习旧知识,导入新知识 t:同学们好,上节课我们学习了二...

函数概念 1.1函数的概念(视频)

蔡高亭,天津大学数学系教授。他是《蔡高亭高等数学》的作者。他在学生中享有很高的声望。在视频教学中,蔡细致的讲解和认真负责的态度打动了学生。蔡高亭高等数学的视频和教学软件可以在线下载。 平台人多,问题太多。我一个人应付不了。我非常抱歉...

大连体育老师设计核酸检测函数表 竟如此厉害

大连体育老师设计核酸检测函数表 竟如此厉害

近日,辽宁省大连市红旗中心小学的一位体育老师和学校其他老师一起设计了一个核酸检测功能表,不仅可以在输入身份证号码后自动计算出考生的年龄和性别,还可以实现手机、电脑等多人同时录入。早在7月22日,辽宁省大连市就出现了新冠肺炎肺炎确诊病例。然后,大连开始了全市的核酸检测工作,学校操场成为检测场所之一。大连市体育教...