当前位置: 首页 > wzjs >正文

帝国网站系统做专题桂林旅游攻略必去景点

帝国网站系统做专题,桂林旅游攻略必去景点,纯ajax网站如何做seo,宝安做棋牌网站建设哪家便宜Promise 详解 1. 基本概念 定义:Promise 是 ES6 引入的异步编程解决方案,表示一个异步操作的最终完成(或失败)及其结果值。核心作用:替代回调函数,解决“回调地狱”问题,提供更清晰的异步流程控…

Promise 详解

在这里插入图片描述


1. 基本概念
  • 定义:Promise 是 ES6 引入的异步编程解决方案,表示一个异步操作的最终完成(或失败)及其结果值
  • 核心作用:替代回调函数,解决“回调地狱”问题,提供更清晰的异步流程控制。

2. 核心状态

Promise 有三种状态:

状态描述
pending初始状态,既未成功也未失败。
fulfilled操作成功完成,Promise 结果可通过 .then() 获取。
rejected操作失败,错误信息可通过 .catch() 获取。

3. 核心方法
// 基本语法
const promise = new Promise((resolve, reject) => {// 异步操作setTimeout(() => {const success = true;if (success) {resolve("成功"); // 改变为 fulfilled} else {reject("失败"); // 改变为 rejected}}, 1000);
});// 使用 then/catch
promise.then((value) => console.log(value)) // 成功时执行.catch((error) => console.error(error)) // 失败时执行.finally(() => console.log("结束")); // 无论成功失败均执行

4. 核心特性
(1) 链式调用(Chaining)
promise.then((result) => {console.log(result); // 第一个 thenreturn result * 2; // 返回值传递给下一个 then}).then((newResult) => console.log(newResult)); // 第二个 then
(2) 错误传递
  • 若某一层 .then() 抛出错误或调用 reject,后续 .then() 会跳过,直接进入最近的 .catch()
promise.then(() => {throw new Error("出错了"); // 触发错误}).then(() => console.log("不会执行")).catch((err) => console.error(err)); // 捕获错误
(3) 微任务队列
  • Promise 的回调(.then/.catch)会被放入微任务队列,优先于宏任务(如 setTimeout)执行:
setTimeout(() => console.log("宏任务"), 0); // 后执行
Promise.resolve().then(() => console.log("微任务")); // 先执行

5. 静态方法
方法作用
Promise.all()等待所有 Promise 完成,返回成功结果数组,若有一个失败则立即返回错误。
Promise.race()哪个 Promise 先完成,就返回其结果(成功或失败)。
Promise.resolve()将现有值或 Promise 转换为 Promise 对象。
Promise.reject()直接生成一个 rejected 状态的 Promise。
// 示例:Promise.all
Promise.all([p1, p2, p3]).then((results) => console.log(results)) // [result1, result2, result3].catch((err) => console.error(err));// 示例:Promise.race
Promise.race([slowPromise, fastPromise]).then((result) => console.log("最快完成的结果:", result));

6. 异常处理
  • 未捕获的 Rejection:若 Promise 抛出错误但未被 .catch() 捕获,会触发全局事件 unhandledrejection
    window.addEventListener('unhandledrejection', (event) => {console.error('未捕获的错误:', event.reason);event.preventDefault(); // 阻止默认的控制台报错
    });
    

7. async/await 语法糖
  • async/await 是基于 Promise 的语法糖,使异步代码更接近同步写法:
async function fetchData() {try {const response = await fetchAPI(); // 等待 Promise 完成console.log(response.data);} catch (error) {console.error(error);} finally {console.log("完成"); // 可选}
}

8. 常见陷阱
  1. 过早 resolve/reject
    如果在 Promise 构造函数中直接调用 resolve/reject,会立即执行,而非等待异步操作:

    // 错误示例:resolve 立即执行
    new Promise((resolve) => {resolve("提前完成"); // 这里会立即 resolvesetTimeout(() => console.log("延迟操作"), 1000);
    });
    
  2. 遗忘 error 处理
    未在链式调用中添加 .catch() 可能导致错误未被捕获。

  3. this 指向问题
    .then() 中使用箭头函数可避免 this 丢失:

    const obj = {asyncMethod() {return new Promise(resolve => resolve("数据"));},process() {this.asyncMethod().then(data => console.log(this)) // `this` 可能为 undefined}
    };
    // 解决方案:绑定 this 或使用箭头函数
    

9. 最佳实践
  1. 避免嵌套回调:使用链式调用或 async/await
  2. 统一错误处理:在顶层添加 .catch() 或全局监听 unhandledrejection
  3. 合理拆分 Promise:将复杂逻辑拆分为多个小 Promise,便于调试。
  4. 结合 async/await 提升可读性
    async function example() {const data = await fetchAPI(); // 等待完成再继续processData(data);
    }
    

10. 与 Callback 的对比
特性PromiseCallback
可读性链式调用更清晰嵌套回调易形成“回调地狱”
错误处理集中通过 .catch() 处理需在每个回调中单独处理错误
控制流支持 Promise.all 等批量操作需手动管理多个回调的完成状态
兼容性需 polyfill 旧版浏览器全局可用,无需额外支持

总结

Promise 是现代 JavaScript 异步编程的核心工具,通过清晰的状态管理和链式调用,极大提升了代码的可维护性。结合 async/await,可以进一步简化异步逻辑,避免回调地狱,是处理异步操作的首选方案。


文章转载自:

http://Qa5ZvJOl.pypbz.cn
http://an1pAhDq.pypbz.cn
http://eC6B3jOE.pypbz.cn
http://IZSX5hYs.pypbz.cn
http://9roc7531.pypbz.cn
http://WRFC6Z87.pypbz.cn
http://RROtuT9N.pypbz.cn
http://8hPn4GQk.pypbz.cn
http://ncSvkh8D.pypbz.cn
http://iGpvVfML.pypbz.cn
http://1Kffh37b.pypbz.cn
http://rAKKiybH.pypbz.cn
http://5OnQTeRp.pypbz.cn
http://eHWeGwtD.pypbz.cn
http://mVGVH3jM.pypbz.cn
http://fecYiE4I.pypbz.cn
http://TjgxDPIl.pypbz.cn
http://aI4nifEh.pypbz.cn
http://63ABuKCP.pypbz.cn
http://HDfH63jy.pypbz.cn
http://M4p1ZasP.pypbz.cn
http://juZTJz5D.pypbz.cn
http://n6MYngqq.pypbz.cn
http://uOgpL4uX.pypbz.cn
http://yhEsczfC.pypbz.cn
http://CsBibLis.pypbz.cn
http://w4cExaW4.pypbz.cn
http://LGKK53rn.pypbz.cn
http://5iH2MXnm.pypbz.cn
http://PGz3Smd3.pypbz.cn
http://www.dtcms.com/wzjs/664046.html

相关文章:

  • 手机网站cms 开源模板网建站
  • 旅游电子商务网站模板北京电商网站开发平台
  • 旅游网站开发价格wordpress 时间函数
  • asp.net网站第一次运行慢wordpress 企业商城
  • 营销型网站建站步骤是什么意思wordpress ap
  • 网站建设质量保证网上怎么打广告最有效果
  • 开拓网站建设楚雄网站设计
  • 做配件出口上什么网站西安市城乡建设管理局网站的公示栏6
  • 智能网站建设背景wordpress切换语言
  • 电子商务网站建设与维护课程总结网站开发框架 简单
  • 网站设计论文开题报告九寨沟网站建设规划书
  • 邢台做网站名列前茅html手机网站怎么做
  • 信誉好的广州外贸网站网页设计模板图片素材下载
  • 中文网站模板网店推广的渠道有哪些
  • 抓取网站访客qq代码网络工程师的发展前景
  • 合理规划网站平台的概念
  • frontpage做网站二手购物网站建设方案
  • 厦门响应式网站物流网站建设实例
  • wap网站开发需要多少钱服务器租用服务
  • 石家庄网站推广服务平台263邮箱
  • 网站不被收录的原因哪个网站做外链视频好
  • nuxt做多页面网站wordpress代码目录结构
  • 俄语购物网站建设国际电商平台排名
  • 陕西建设交通集团招聘信息网站wordpress简单投稿
  • 做淘宝客网站能有效果吗seo和sem的区别是什么
  • 网站备案通过后怎么办电商设计和平面设计的区别
  • 怎么推销自己的网站上海企业网站建设公司哪家好
  • 滨海专业做网站网站建设后期服务收费标准
  • 专门做定制的网站wordpress no follow
  • 网站建设服务电话信息流广告代运营