因为 js 是单线程,所有的同步任务要等前一个任务执行完毕,再执行下一个任务。

function fn1() {console.log("fn1")fn2()fn3()
}function fn2() {console.time()for (let i = 0; i < 1000; i++) {console.log("fn2 repeat");}console.timeEnd()
}function fn3() {console.log("fn3")
}
fn1()


但是异步任务并不是这样的。

function fn1() {console.log("fn1")fn2()fn3()
}function fn2() {setTimeout(() => {console.log("fn2");}, 0);
}function fn3() {console.log("fn3")
}
fn1()

使用 Promise 实现在异步代码执行完毕之后,在执行后续代码

function fn1() {console.log("fn1")fn2().then(() => {fn3()})
}function fn2() {return new Promise(resolve => {setTimeout(() => {console.log("fn2");resolve()}, 1000);})
}function fn3() {console.log("fn3")
}
fn1()

添加 async / await 美化 Promise

async function fn1() {console.log("fn1")await fn2()fn3()
}function fn2() {return new Promise(resolve => {setTimeout(() => {console.log("fn2");resolve()}, 1000);})
}function fn3() {console.log("fn3")
}
fn1()

关于 JS 中,实现在异步代码执行完毕再执行后续代码相关推荐

  1. 【前端】等待异步任务js执行完毕再执行

    [前端]等待异步任务js执行完毕再执行 //页面加载完毕后执行 $(function(){console.info('---- 我是js代码 Start ----');//异步方法集合let prom ...

  2. python等待执行完毕 再继续执行_如何等待一个函数内部异步执行完毕再执行另外一个函数?...

    问题描述 有两个函数f1和f2,其中f1中有异步操作,执行完f1接着执行f2,因为f1内部有异步操作,所以会先执行完f2,再执行f1里的异步,如何等待f1异步执行完再执行f2. 备注:执行方式为f1( ...

  3. java主线程等待所有子线程执行完毕再执行

    java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用 ...

  4. java等待所有子线程执行完毕再执行

    前言:在工作项目中,有很多耗时处理都需要开多线程运行.简单的接口可以直接异步处理解决,但是对于一些业务逻辑复杂需要同步返回的这时候就需要用到以下三个多线程等待方法了. 1.  thread.join( ...

  5. Java主线程等待所有子线程执行完毕再执行解决办法(转)

    方法一: Thread.join()方法,亲测可行,thread.join()方法 [java] view plain copy Vector<Thread> ts = new Vecto ...

  6. Thread:主线程等待子线程执行完毕再执行解决办法

    线程从启动到执行完毕,一般会有一些耗时操作,并不能像一般的程序语句,就能立马结束.如下代码: package com.xxx.async; public class WaitThreadDone {p ...

  7. Promise.all等待方法执行完毕再执行

    1. p1,p2,p3需要先进行计算或者请求,等请求完成后,再执行Promise.all里的then(这个可以替代settimeout,毕竟settimeout不知道有些需要执行的时间) var p1 ...

  8. ajax请求必须打断点才能成功,Jquery等待ajax执行完毕继续执行(断点调试正常,运行异常)...

    以前写过一个程序,发现用断点调试的时候,一步步的运行,程序是可以的,但是去了断点程序就出现了问题. $(document).ready(function(){ var arra=new Array() ...

  9. js中的循环(跳过(continue)和中断执行(break))

    js中的循环(跳过(continue)和中断执行(break)) js循环中可以在循环时是可以中断后续执行和跳过的 看下面这个栗子 //计算1~100之间的和 //我们没有学习过循环之前,使用的做法, ...

最新文章

  1. 「3」Java开发环境搭建
  2. 百度云 ajax jquery 三级联动,jQuery ajax实现省市县三级联动
  3. 云服务器端口对外开放详解
  4. JS快速实现深拷贝--一行就搞定了
  5. 【ERP】如何根据系统币种(扩展)精度来动态产生数字的格式(FORMAT MASK)
  6. Hadoop Mapreduce分区、分组、二次排序过程详解
  7. gcc 5.2.0 手动更新(亲测)
  8. 存储器块清零c语言版,存储器块清零实验报告
  9. 织梦文章批量更新软件
  10. 迪杰特斯拉算法的实现
  11. BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
  12. SQL Server实际执行计划COST欺骗案例
  13. 使用移远EC200N-CN模组PING谷歌
  14. 利用vertical-align:middle实现在整个页面居中
  15. java套接字实验总结,实验三、WINSOCK套接字编程实验报告
  16. 【一天一个挨打小技巧】暴力磁力种子磁力链接下载
  17. IDEA快捷键大全 + 动图演示,提升效率
  18. Java拼接sql,并组装成建表语句
  19. xp连接win10工作组计算机,教你XP系统下连接win10共享的打印机的方法教程
  20. 【bat】 计算机清理原理,使用bat脚本清理系统垃圾的方法

热门文章

  1. Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
  2. 6.22(js-->案例应用)
  3. 如何用计算机把数字12变成21,2015年12月计算机二级office考试题及答案
  4. c++ primer plus 6.11第四题 加入Benevolent Order of Programmer后,
  5. 《数字图像处理》学习笔记(四)--混合空间增强法(待修改)
  6. 全球首例!韩国或将禁止苹果和谷歌向开发者收佣
  7. Teamcenter8 更改料号所有者操作
  8. CSU 1596 Dick.Z 的炉石赛 数学期望
  9. 【tsinsen A1490】osu!(乔明达) 矩阵+线段树
  10. strtod() 函数