一、概述

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. 使用Wesky.Net.Opentools库,一行代码实现实体类类型转换为Json格式字符串

    安装1.0.10以及以上版本的 Wesky.Net.OpenTools 包   包内,该功能的核心代码如下: 自定义属性: 实体类JSON模式生成器:   使用方式:引用上面的1.0.10版本或以上的 ...

  2. 类的阐述 package(包)

    类的阐述 同一个文件中可以定义很多类 编译后,每个类都会生成独立的.class文件 一个类中,只能有一个主函数,每个类都可以有自己的主函数 public修饰的类称为公开类,要求类名必须与文件名称完全相 ...

  3. json null (空值)不序列化

    json null (空值)不序列化 JsonSerializerSettings jsetting = new JsonSerializerSettings(); jsetting.DefaultV ...

  4. C#.NET 使用Task.Run和Task.Delay 延时执行任务(代码)

    C#.NET 使用Task.Run和Task.Delay 延时执行任务(代码) 环境: .NET 4.5.2 .NET WEB MVC + WEB API. 示例代码: using CommonUti ...

  5. redis数据持久化篇

    为什么需要持久化 Redis是个基于内存的数据库. 那服务一旦宕机,内存中的数据将全部丢失. 通常的解决方案是从后端数据库恢复这些数据,但后端数据库有性能瓶颈 如果是大数据量的恢复,1.会对数据库带来 ...

  6. onreadystatechange 属性

    onreadystatechange 属性是 XMLHttpRequest 对象的一个事件处理器,用于在 XMLHttpRequest 对象的 readyState 属性发生变化时触发.这个属性通常用 ...

  7. 如何用matlab求隐式函数的导数

    如何用matlab求隐式函数的导数 隐函数求导的例子 假设有一个圆 \(x^2+y^2=5\) , 要求在某个点上的切线的斜率. 我们可以把式\(x^2+y^2=5\)中的每一项对\(x\)求导, 可 ...

  8. EEPROM、Flash有关知识

    存储器分为两大类:RAM(Random Access Memory,任意地址访问储存器)和ROM(Read-Only Memory,只读储存器). 发展历史 ROM Read-Only Memory, ...

  9. C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏

    前言 今天大姚给大家分享一款由C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏:SeeSharpSnake. 项目特点 该仓库中的项目文件和脚本可以用多种不同的配置构建相同的游戏,每个配置生成的输出大 ...

  10. SpringBoot获取指定Resource下的文件内容

    加入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...