一、概述

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的更多相关文章

  1. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  2. 【vue】移动端demo资料

    http://imzjh.com/inew/#/(移动端demo) https://github.com/liangxiaojuan/eleme(饿了么git地址) https://github.co ...

  3. 【vue】MongoDB+Nodejs+express+Vue后台管理项目Demo

    ¶项目分析 一个完整的网站服务架构,包括:   1.web frame ---这里应用express框架   2.web server ---这里应用nodejs   3.Database ---这里 ...

  4. 【vue】本地开发mock数据支持

    项目离不开数据渲染的支持,为本地开发配置 数据  支持. (一)方式一:安装JSON Server搭建mock数据的服务器 json Server 是一个创建 伪RESTful服务器的工具. 配置流程 ...

  5. 【vue】npm run mock & npm run dev 无法同时运行的解决

    [关于系统,没注明的都是windows系统,若以后用的是mac系统则会另外备注] 当项目数据是通过mock搭建而成(参照:[vue]本地开发mock数据支持)时,运行mock服务器和项目的命令 就参照 ...

  6. 【VUE】自定义组件

    [VUE]自定义组件 转载: ============================================ ======================================== ...

  7. 【VUE】使用问题记录

    [VUE]使用问题记录 ===================================================================== 1.Vue.nextTick 修改数 ...

  8. 【VUE】数组

    [VUE]常用函数 转载:https://www.cnblogs.com/yangchongxing/p/10637087.html 目录 ============================== ...

  9. 【vue】生成接口模拟数据

    目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...

  10. 【Vue】详解Vue生命周期

    Vue实例的生命周期全过程(图) (这里的红边圆角矩形内的都是对应的Vue实例的钩子函数) 在beforeCreate和created钩子函数间的生命周期 在beforeCreate和created之 ...

随机推荐

  1. kettle从入门到精通 第五十五课 ETL之kettle Excel输入

    1. Excel输入,Microsoft Excel输入步骤的作用是从Microsoft Excel中读取数据,如下图所示: 1)Excel输入步骤从文件D:\data\测试数据.xlsx读取数据. ...

  2. linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档

    linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档 1.解压缩压缩命令 zip -p -r mymail-1026.zip mymail/ 解压命令 unzip mymai ...

  3. spark读取写入jdbc.,Caused by: java.lang.NoSuchMethodException: org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.<init>()

    df.write .option("truncate", "true") .option("driver", mysqlDriver) .m ...

  4. Elastic-Search 整理(二):高级篇

    ES高级篇 集群部署 集群的意思:就是将多个节点归为一体罢了,这个整体就有一个指定的名字了 window中部署集群 - 了解 把下载好的window版的ES中的data文件夹.logs文件夹下的所有的 ...

  5. P6655 题解

    直接计数其实不好记,不如计数转期望. 令 \(f_i\) 表示点 \(i\) 成为制高点概率,不难发现期望就是 \(\sum f_i\). 根据定义对于 \(f\) 我们有如下转移 \(f_i = \ ...

  6. typora markdown笔记

    前言 此为个人markdown笔记,不定时更新. 正文 1. mermaid 使用 横向流程图 源码 graph LR a(起始)-->b(中间) b-->c1<-->d b- ...

  7. Vue手稿4

  8. Mybatis Plus 3.X版本的insert填充自增id的IdType.ID_WORKER策略源码分析

    总结/朱季谦 某天同事突然问我,你知道Mybatis Plus的insert方法,插入数据后自增id是如何自增的吗? 我愣了一下,脑海里只想到,当在POJO类的id设置一个自增策略后,例如@Table ...

  9. 新一代Java高性能构建工具Maven-mvnd【实践可行版】

    Maven-mvnd介绍 Maven 的优点是稳定可靠,在绝大多数的项目上工作良好,社区生态很完善,几乎所有的 Java 开发者都在用.Maven 的缺点是,对于大一点的项目来说,构建太慢了.有时候只 ...

  10. 新一代云原生日志架构 - Loggie的设计与实践

    Loggie萌芽于网易严选业务的实际需求,成长于严选与数帆的长期共建,持续发展于网易数帆与网易传媒.中国工商银行的紧密协作.广泛的生态,使得项目能够基于业务需求不断完善.成熟.目前已经开源:https ...