Javascript提高:JavaScript Promise 超通俗解释-由Deepseek产生
JavaScript Promise 超通俗解释Promise是 JS 中专门用来处理异步操作的对象它解决了传统回调函数的「回调地狱」问题让异步代码比如请求接口、读取文件、定时器写起来像同步代码一样清晰、好维护。简单说Promise 就是一个“承诺”—— 异步操作现在没结果但未来一定会给你一个结果成功/失败。1. Promise 的三种状态Promise 一生只有 3 种状态状态一旦改变就固定不可逆pending等待中初始状态异步任务正在执行比如接口还没返回、定时器还没到时间fulfilled已成功异步任务执行成功会返回结果rejected已失败异步任务执行失败会返回错误状态变化只有两种pending → fulfilled成功pending → rejected失败2. 基础语法创建和使用 Promise① 创建 Promise用new Promise()构造函数里面包裹异步代码// 定义一个 Promise 函数functionwaitTime(time){// 返回 Promise 对象returnnewPromise((resolve,reject){// 异步操作定时器setTimeout((){if(time0){// ✅ 成功调用 resolve把结果传出去resolve(等待了${time}毫秒执行成功);}else{// ❌ 失败调用 reject把错误传出去reject(时间不能小于等于0);}},time);});}resolve成功时调用把状态改为fulfilledreject失败时调用把状态改为rejected② 使用 Promise用.then()接收成功结果.catch()捕获错误.finally()无论成功失败都会执行waitTime(2000).then((result){// 成功回调拿到 resolve 的数据console.log(result);// 输出等待了 2000 毫秒执行成功}).catch((error){// 失败回调拿到 reject 的错误console.error(error);}).finally((){// 最终回调无论成功/失败都执行常用于关闭加载、清理操作console.log(异步操作结束);});3. 核心优势解决回调地狱传统异步嵌套回调地狱代码嵌套多层可读性极差// 回调地狱 ❌setTimeout((){console.log(第一步);setTimeout((){console.log(第二步);setTimeout((){console.log(第三步);},1000);},1000);},1000);用 Promise 链式调用扁平化逻辑清晰// Promise 链式调用 ✅waitTime(1000).then((){console.log(第一步);returnwaitTime(1000);// 返回新 Promise继续链式}).then((){console.log(第二步);returnwaitTime(1000);}).then((){console.log(第三步);});4. 进阶async/awaitPromise 语法糖ES7 推出的async/await是 Promise 的最简写法让异步代码完全像同步代码// 用 async 标记函数是异步函数asyncfunctiondoTask(){try{// await 等待 Promise 完成直接拿到结果constres1awaitwaitTime(1000);console.log(res1);constres2awaitwaitTime(1000);console.log(res2);}catch(error){// 统一捕获所有错误console.error(error);}}doTask();await必须写在async函数里await后面跟 Promise 对象会暂停等待Promise 完成用try/catch捕获错误替代.catch()5. 常用 Promise 静态方法①Promise.all()并行执行多个 Promise全部成功才返回结果一个失败就整体失败常用于批量请求接口constp1waitTime(1000);constp2waitTime(2000);// 等待所有 Promise 完成Promise.all([p1,p2]).then((results){console.log(results);// [结果1, 结果2]}).catch((err){console.log(有一个失败了);});②Promise.race()谁先完成成功/失败就返回谁的结果常用于接口超时控制③Promise.resolve()/Promise.reject()快速创建一个成功/失败的 Promise。总结Promise 是异步编程解决方案解决回调地狱让代码更优雅三种状态pending→fulfilled/rejected状态不可逆核心方法.then()成功、.catch()失败、.finally()最终最简写法async/awaitPromise 语法糖常用工具Promise.all()并行执行多个异步任务