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

嘉兴做网站优化多少钱百度一下网页搜索

嘉兴做网站优化多少钱,百度一下网页搜索,为什么有的网站点不开,网站如何做seo排名文章目录 一、为什么需要 Promise?二、 Promise 的核心原理三、Promise 的6种高级用法四、何时使用 Promise?五、在 Vue 中如何正确使用 Promise?六、常见错误与解决方案七、总结: Promise 的最佳实践 一、为什么需要 Promise? 假设你点了一份外卖,…

文章目录

  • 一、为什么需要 Promise?
  • 二、 Promise 的核心原理
  • 三、Promise 的6种高级用法
  • 四、何时使用 Promise?
  • 五、在 Vue 中如何正确使用 Promise?
  • 六、常见错误与解决方案
  • 七、总结: Promise 的最佳实践

一、为什么需要 Promise?

假设你点了一份外卖,传统回调函数的方式相当于:

点外卖(()=>{等外卖送到后(()=>{吃完后收拾桌子(()=>{// 回调地狱!代码嵌套越来越深})})
})

问题: 代码嵌套层级多(回调地狱),错误处理困难,逻辑难以维护
Promise 的解决思路:

点外卖().then(等外卖送到).then(吃完后收拾桌子).then(处理错误);

代码变为链式结构,逻辑清晰,支持统一错误处理

二、 Promise 的核心原理

1.三种状态

  • Pending (等待中):初始状态,既未完成也未拒绝。
  • Fulfilled (已成功):操作成功完成。
  • Rejected (已拒绝):操作失败。

状态特点:

  • 不可逆: 一旦从 Pending 变成 Fulfilled 或者 Rejected,状态不再改变
  • 不可取消: 无法中途取消一个 Promise

2.创建 Promise

const promise = new Promise((resolve, reject) => {// 异步操作(如请求接口、定时器等)if(成功){resolve('成功的结果')} else {reject('失败的原因')}
})

3.核心方法

方法作用
.then()处理成功状态,接收 resolve 的结果
.catch()处理失败状态,接收 reject 的原因
.finally()无论成功或失败,最后执行的操作

三、Promise 的6种高级用法

1.链式调用

fetchData().then(处理数据).then(保存到数据库).catch(处理错误)

关键点: 每一个 .then 返回一个新的 Promise

2.错误穿透

fetchData().then(处理数据).then(保存到数据库).catch(错误 => {// 捕获链中任意一个环节的错误})

3.静态方法

1.Promise.all([p1, p2, p3]): 全部成功时返回结果数组,任意一个失败立即终止
Promise.all([请求1, 请求2, 请求3]).then(([结果1, 结果2, 结果3]) => {} )2.Promise.race([p1, p2]): 取最先完成的 Promise (无论成功或失败)
// 超时控制:如果请求超过3秒,自动取消
Promise.race([fetchData(), timeout(3000)]);3.Promise.allSettled([p1, p2]): 等待所有 Promise 完成(无论成功或失败),返回状态和结果
Promise.allSettled([请求1, 请求2]).then(results => {results.forEach(result => {if(result.status === 'fulfilled'){console.log(result.value);} else {console.log(result.reason);}})})

4.async/await 结合

async function loadData() {try {const data1 = await fetchData1();const data2 = await fetchData2(data1);return data2;} catch (error) {console.error('加载失败', error)}
}

注意: await 只能在 async 函数中使用

四、何时使用 Promise?

适用场景

  1. 网络请求:如 AJAX、Fetch API、Axios
  2. 定时任务:setTimeout 封装为 Promise
  3. 文件读写:Node.js 中 fs.promises
  4. 多个异步任务顺序执行:如先登录,再获取用户信息

不适用场景

  1. 简单同步操作:如计算1+1,无需 Promise
  2. 需要取消的异步任务:需使用 AbortController 或其他方案

五、在 Vue 中如何正确使用 Promise?

1.数据请求(Axios 示例)

<script>
export default {data() {return {posts: [],loading: false,error: null};},methods: {async fetchPosts() {this.loading = true;try {const response = await axios.get('/api/posts');this.posts = response.data;} catch (error) {this.error = error.message;} finally {this.loading = false;}}},mounted() {this.fetchPosts();}
};
</script>

2.处理用户交互

<template><button @click="handleSubmit" :disabled="isSubmitting">{{ isSubmitting ? '提交中...' : '提交' }}</button>
</template><script>
export default {data() {return {isSubmitting: false};},methods: {async handleSubmit() {if (this.isSubmitting) return;this.isSubmitting = true;try {await submitForm();this.$toast.success('提交成功!');} catch (error) {this.$toast.error('提交失败: ' + error.message);} finally {this.isSubmitting = false;}}}
};
</script>

3.Vue3 Composition API

<script setup>
import { ref } from 'vue';
import axios from 'axios';const data = ref(null);
const loading = ref(false);
const error = ref(null);const fetchData = async () => {loading.value = true;try {const response = await axios.get('/api/data');data.value = response.data;} catch (err) {error.value = err.message;} finally {loading.value = false;}
};// 生命周期中调用
onMounted(() => {fetchData();
});
</script>

六、常见错误与解决方案

1.未处理拒绝的 Promise

// 错误写法:未捕获错误可能导致程序奔溃
fetchData().then(handleSuccess);// 正确写法:始终添加 .catch
fetchData().then(handleSuccess).catch(handleError);

2.在循环中错误使用 await

// 错误:顺序执行,耗时增加
for(const url of urls){await fetch(url);
}// 正确:并行执行
const promises = urls.map(url => fetch(url))
const results = await Promise.all(promises)

3.忘记返回 Promise

// 错误:第二个 .then() 接收不到数据
fetchData().then(data => {processData(data); // 未返回}).then(result => {// result 是 undefined});// 正确:返回处理后的值
fetchData().then(data => {return processData(data);}).then(result => {// 正确接收处理后的数据});

七、总结: Promise 的最佳实践

  1. 始终处理错误:使用 .catch() 或 try/catch
  2. 避免嵌套:用链式调用替代回调金字塔
  3. 合理使用静态方法:Promise.all 并行请求, Promise.race 超时控制
  4. 与 async/await 结合:让异步代码看起来像同步代码
  5. 在 Vue 中管理状态:结合 loading、error 等状态提升用户体验
http://www.dtcms.com/wzjs/495650.html

相关文章:

  • 做网站需要哪方面的编程免费seo工具大全
  • 阜阳企业网站建设seo数据是什么
  • 石家庄哪里有网站建设发布新闻最快的网站
  • 自己做网站有什么意义企业网站管理系统怎么操作
  • 网站开发 占位符app开发平台开发
  • jquery素材网站百度站长平台登录
  • 华为网站的建设建议设计公司取名字大全集
  • 天河公司网站建设公司营销类网站
  • 之江汇学校网站建设域名大全免费网站
  • seo和网站建设那个先学西安网站优化推广方案
  • 陕西 工程建设 公司 网站湖南做网站的公司
  • 潍坊路通工程建设有限公司网站中国seo
  • php动态网站开发第四章答案搜索引擎优化的方式
  • 无需下载国外黄冈网站推广seo推广是做什么的
  • 网站后台操作教程百度售后服务电话人工
  • 上海市建设部注册中心网站网站关键词优化技巧
  • 个人服务器搭建做网站什么是关键词推广
  • 西安杰商网络网站建设app开发自学教程
  • 网站构成的基本结构seo技术学院
  • 电子商务网站购物车怎么做网站推广专家
  • 毕业设计代做网站多少钱如何创建一个平台
  • 宁波网站建设高端windows优化大师靠谱吗
  • 白云区建网站广东东莞疫情最新消息今天又封了
  • 深圳网站建设哪家公司好站长工具视频
  • 建设个电影网站多少钱维普网论文收录查询
  • 建站网站源码360优化大师官方下载手机
  • 网站客服模版关键词查找工具
  • wordpress账号停用神马移动排名优化
  • 淘客必须做网站seo公司优化排名
  • 星锐网站建设自媒体平台注册入口官网