JavaScript异步编程通过Promise解决回调地狱问题,以链式调用替代嵌套回调,支持统一错误处理;还提供all、race、allSettled、any等方法协调多任务,但无法取消且立即执行。
JavaScript异步编程是指在不阻塞主线程执行的前提下,处理耗时操作(如网络请求、文件读取、定时任务)的编程方式。传统上靠
回调函数
实现,但嵌套过深会形成“回调地狱”,代码难以阅读和维护。Promise 通过链式调用和统一的状态管理,把嵌套回调转为扁平结构,显著提升可读性和错误处理能力。
回调地狱长什么样?
当多个异步操作需要串行执行时,回调函数层层嵌套:
这种写法的问题:缩进越来越深、错误处理分散、逻辑耦合紧、无法自然 return 或 break。
Promise 怎么打破嵌套?
Promise 将异步操作封装为一个对象,有 pending/fulfilled/rejected 三种状态,支持
.then()
和
.catch()
链式注册回调:
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
每个
.then()
返回一个新的 Promise,可继续链式调用
上一个
.then()
的返回值自动传给下一个
.then()
的参数
任意环节抛错或 reject,都会被最近的
.catch()
捕获,错误处理集中
Promise 还提供了哪些实用方法?
除了链式调用,Promise 内置了多个静态方法来协调多个
异步任务
:
Promise.all([])
:全部成功才 resolve,任一失败则立即 reject
Promise.race([])
:哪个先 settled(完成或失败),就以它的结果为准
Promise.allSettled([])
:等待所有 Promise 结束,不管成功失败,返回每个结果的状态数组
Promise.any([])
:只要有一个成功就 resolve,全失败才 reject(ES2021)
注意:Promise 不能完全消除异步复杂性
它简化的是回调组织形式,不是异步本身。比如:
Promise 一旦创建就会立即执行(构造函数内逻辑是同步的)
无法中途取消(需配合 AbortController 或封装 cancelable Promise)
错误冒泡只到最近的
.catch()
,漏写会导致静默失败
真正现代化的写法是配合
async/await
,让 Promise 更像同步代码
getData(function(a) {
getMoreData(a, function(b) {
getEvenMoreData(b, function(c) {
console.log(c);
});
});
});
getData()
.then(a => getMoreData(a))
.then(b => getEvenMoreData(b))
.then(c => console.log(c))
.catch(err => console.error('出错了:', err));
