【Vue】Re19 Promise
一、概述
Promise是异步编程的解决方案
异步事件的处理:
封装的异步请求函数不能立即获取结果,
通常会传入另外一个函数,在请求成功的时候将数据通过传入的函数回调出去
如果只是一个简单的请求,那么这种方案非常的麻烦
但是,如果请求非常复杂的时候,就会出现回调地狱
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
// todo ... 开始写 jQuery 代码...
$.ajax('url-link or api-address', function (data1) {
$.ajax('url-link or api-address', function (data2) {
$.ajax('url-link or api-address', function (data3) {
$.ajax('url-link or api-address', function (data4) {
console.log(data4);
})
})
})
});
});
</script>
二、语法样例:
/* 链式编程警告 !!!! */
/* 构造参数是一个函数 入参函数本身 包括两个参数, 解析 与 拒绝 */
/* resolve, reject 也是函数。。。 */
new Promise((resolve, reject) => {
setTimeout(() => { /* 模拟第一次的异步请求 */
resolve(); // 调用 resolve 会直接跳转到下面的then函数执行
}, 1000);
}).then(() => { /* 第一次得到data结果的处理逻辑 */
console.log('request01 executed...');
console.log('request01 executed...');
console.log('request01 executed...');
return new Promise((resolve, reject) => {
setTimeout(() => { /* 第二次的异步请求 */
resolve();
}, 1000);
}).then(() => { /* 第二次得到data结果的处理逻辑 */
console.log('request02 executed...');
console.log('request02 executed...');
console.log('request02 executed...');
return new Promise((resolve, reject) => {
setTimeout(() => { /* 第三次的异步请求 */
resolve();
}, 1000);
}).then(() => {
console.log('request03 executed...');
console.log('request03 executed...');
console.log('request03 executed...');
});
});
});
/* 上述代码可以看出我们的Promise结构就分为两部分,构造器参数的执行 和 then函数 */
/* 构造器负责请求的发生, 而then函数负责响应数据的逻辑处理 */
如果是响应失败的情况,再引用catch函数捕获处理:
new Promise((resolve, reject) => {
setTimeout(() => { /* 模拟第一次的异步请求 */
resolve(); // 调用 resolve 会直接跳转到下面的then函数执行
}, 1000);
}).then(() => { /* 第一次得到data结果的处理逻辑 */
console.log('request01 executed...');
console.log('request01 executed...');
console.log('request01 executed...');
return new Promise((resolve, reject) => {
setTimeout(() => { /* 第二次的异步请求 */
resolve();
}, 1000);
}).then(() => { /* 第二次得到data结果的处理逻辑 */
console.log('request02 executed...');
console.log('request02 executed...');
console.log('request02 executed...');
return new Promise((resolve, reject) => {
setTimeout(() => { /* 第三次的异步请求 */
resolve();
}, 1000);
}).then(() => {
console.log('request03 executed...');
console.log('request03 executed...');
console.log('request03 executed...');
}).catch(error => {
console.log(error);
});
}).catch(error => {
console.log(error);
});
}).catch(error => {
console.log(error);
});
三、Promise的三种状态
Pending等待状态:
请求进行中,定时器尚未到达触发时间
Fullfill满足状态:
主动回调resolve时,回调then函数
Reject拒绝状态:
主动回调rejec时t,回调执行catch函数
四、All方法
语法演示
<!--<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>-->
<script src="./../../dependencies/jquery.min.js"></script>
<script type="text/javascript"> /* all方法注入的是一个数组 */
Promise.all([
new Promise((resolve, reject) => {
$.ajax({
url : 'url',
success : data => {
resolve(data);
}
})
}),
new Promise((resolve, reject) => {
$.ajax({
url : 'url',
success : data => {
resolve(data);
}
})
}),
]).then(results => {
console.log(results[0]);
console.log(results[1]);
});
</script>
案例:
/* 方法注入的是一个数组 */
Promise.all([
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('result');
}, 1000);
}),
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('result');
}, 1000);
}),
]).then(results => {
console.log(results);
console.log(results[0]);
console.log(results[1]);
});
应用场景:同时发送两个以上的异步请求
【Vue】Re19 Promise的更多相关文章
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...
- 【vue】移动端demo资料
http://imzjh.com/inew/#/(移动端demo) https://github.com/liangxiaojuan/eleme(饿了么git地址) https://github.co ...
- 【vue】MongoDB+Nodejs+express+Vue后台管理项目Demo
¶项目分析 一个完整的网站服务架构,包括: 1.web frame ---这里应用express框架 2.web server ---这里应用nodejs 3.Database ---这里 ...
- 【vue】本地开发mock数据支持
项目离不开数据渲染的支持,为本地开发配置 数据 支持. (一)方式一:安装JSON Server搭建mock数据的服务器 json Server 是一个创建 伪RESTful服务器的工具. 配置流程 ...
- 【vue】npm run mock & npm run dev 无法同时运行的解决
[关于系统,没注明的都是windows系统,若以后用的是mac系统则会另外备注] 当项目数据是通过mock搭建而成(参照:[vue]本地开发mock数据支持)时,运行mock服务器和项目的命令 就参照 ...
- 【VUE】自定义组件
[VUE]自定义组件 转载: ============================================ ======================================== ...
- 【VUE】使用问题记录
[VUE]使用问题记录 ===================================================================== 1.Vue.nextTick 修改数 ...
- 【VUE】数组
[VUE]常用函数 转载:https://www.cnblogs.com/yangchongxing/p/10637087.html 目录 ============================== ...
- 【vue】生成接口模拟数据
目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...
- 【Vue】详解Vue生命周期
Vue实例的生命周期全过程(图) (这里的红边圆角矩形内的都是对应的Vue实例的钩子函数) 在beforeCreate和created钩子函数间的生命周期 在beforeCreate和created之 ...
随机推荐
- C++常用模板
常用模板: 数学: 1. 组合数 组合数 #include<bits/stdc++.h> using namespace std; #define ll long long const l ...
- VictoriaLogs 要凭什么革了各家日志存储的命
如果大家对时序指标的存储方案有些了解,那大概率会听过 VictoriaMetrics,VictoriaMetrics 号称 Prometheus 的升级版,在性能和成本方面也确实做得很好,如果是夜莺新 ...
- cdn静态资源加速
阿里云cdn产品 https://www.aliyun.com/product/cdn CDN通过广泛的网络节点分布,提供快速.稳定.安全.可编程的全球内容分发加速服务,支持将网站.音视频.下载等内容 ...
- Android开发基础——真机测试错误,ADB启动不了,程序安装不了,the connection to adb is down,INSTALL_CANCELED_BY_USER...
在Android开发中,无论是真机测试还是AVD测试,都会报出这些错误.在这里,我会详细说明一下怎么会出现这些错误的,然后要怎么样才能解决这些错误. 错误一: The connection to ad ...
- 解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展
解锁LLMs的"思考"能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展 1.简介 Chain-of-Thought(CoT)是一种改进的Prompt技术, ...
- Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算
Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算 1.定义请求和返回对象的上下文对象 package com.example.core.mydemo.java.filter; i ...
- redis zset 延迟合并任务处理
redis zset 延迟合并任务处理 @Autowired public RedisTemplate redisTemplate; ##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理. ...
- 基于 .NET CORE + VUE 前后端项目打包,实现批处理安装,一键部署
2023年7月18日 目前基于已完成了基于WPF界面的全自动部署小工具 自动判断相关.net core环境和依赖,自动部署mysql数据库,自动部署前后端web服务的功能. 有疑问的可以直接评论. - ...
- Grab 基于 Apache Hudi 实现近乎实时的数据分析
介绍 在数据处理领域,数据分析师在数据湖上运行其即席查询.数据湖充当分析和生产环境之间的接口,可防止下游查询影响上游数据引入管道.为了确保数据湖中的数据处理效率,选择合适的存储格式至关重要. Vani ...
- Vim的移动大法
Vim的移动大法 移动光标的按键 "h" 向左移动 "j"向下移动 "k"向上移动 "l"向右移动 在单词之间移动 注: ...