JavaScript异步编程通过Promise解决回调地狱问题,以链式调用替代嵌套回调,支持统一错误处理;还提供all、race、allSettled、any等方法协调多任务,但无法取消且立即执行。
JavaScript异步编程是指在不阻塞主线程执行的前提下,处理耗时操作(如网络请求、文件读取、定时任务)的编程方式。传统上靠回调函数实现,但嵌套过深会形成“回调地狱”,代码难以阅读和维护。Promise 通过链式调用和统一的状态管理,把嵌套回调转为扁平结构,显著提升可读性和错误处理能力。
当多个异步操作需要串行执行时,回调函数层层嵌套:
getData(function(a) {
getMoreData(a, function(b) {
getEvenMoreData(b, function(c) {
console.log(c);
});
});
});
这种写法的问题:缩进越来越深、错误处理分散、逻辑耦合紧、无法自然 return 或 break。
Promise 将异步操作封装为一个对象,有 pending/fulfilled/rejected 三种状态,支持 .then() 和 .catch() 链式注册回调:
getData() .then(a => getMoreData(a)) .then(b => getEvenMoreData(b)) .then(c => console.log(c)) .catch(err => console.error('出错了:', err));
除了链式调用,Promise 内置了多个静态方法来协调多个异步任务:
它简化的是回调组织形式,不是异步本身。比如: