回调函数及异步任务
回调函数:
当一个函数作为参数传入另一个参数中,并且它不会立即执行,只有当满足一定条件后该函数才可以执行,这种函数就称为回调函数
异步任务:
与之相对应的概念是“同步任务”,同步任务在主线程上排队执行,只有前一个任务执行完毕,才能执行下一个任务。异步任务不进入主线程,而是进入异步队列,前一个任务是否执行完毕不影响下一个任务的执行
setTimeout(function () {
console.log('执行了回调函数');
},1000)
console.log('程序结束')
//输出结果是:
//程序结束
//执行了回调函数
这种不阻塞后面任务执行的任务就叫做异步任务
回调地狱
实例1: 打印一句话,语序必须是:”武林要以和为贵,要讲武德,不要窝里斗。”
//回调函数的实现
setTimeout(function () {
console.log('武林要以和为贵');
setTimeout(function () {
console.log('要讲武德');
setTimeout(function () {
console.log('不要窝里斗');
},1000)
},2000)
},3000)
- 这种回调函数中嵌套回调函数的情况就叫做 回调地狱
- 回调地狱就是为实现代码顺序执行而出现的一种操作
回调地狱问题:
- 嵌套层次很深,可读性差,难以维护
- 无法正常使用 return 和 throw
- 无法正常检索堆栈信息
- 多个回调之间难以建立联系
Promise对象
Promise对象 是js中的一个原生对象,是一种异步编程的解决方案,可以替换掉传统的回调函数解决方案
ES6中,Promise通过引入一个回调,避免更多的回调,简单说Promise就是一个容器,里面保存着某个未来才会结束的事件 (通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。
//promise对象实现
function fn(str) {
//创建promise对象
var p=new Promise(function (resolve, reject) {
let flag=true;
setTimeout(function () {
if

本文介绍了JavaScript中的异步编程,从回调函数和异步任务的概念,深入到回调地狱的问题,然后讲解了Promise对象及其解决回调地狱的方式,包括Promise的状态和方法。接着,文章探讨了ES7引入的async/await函数,如何通过它们写出更清晰的异步代码,并对比了Promise和async/await的区别。最后,总结了async/await的特点和优势。


被折叠的 条评论
为什么被折叠?



