一、概述

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. Node安装mongodb

    Node操作mongodb Mongoose介绍 网址:http://www.mongoosejs.net/docs/index.html mongoose是Node环境下异步操作mongodb数据库 ...

  2. ETL工具-nifi干货系列 第十讲 处理器RouteOnAttribute(数据流路由)

    1.今天我们一起来学习下处理器RouteOnAttribute,此处理器的作用是根据属性值进行路由进而来控制数据流的走向.类似于java中的if-else或者switch-case.如下图所示. Ge ...

  3. kettle从入门到精通 第二十三课 kettle carte 错误(java.lang.OutOfMemoryError: GC overhead limit exceeded,Could not emit buffer due to lack of requests,java heap space)分析

    1.Could not emit buffer due to lack of requests(无法发出缓冲区,因为请求不足.) 原因有两点:1)消费者处理数据能力较弱,如表输出步骤.2)消费者没有处 ...

  4. 如何去掉安装IDEA生成的鼠标右键

    IDEA去掉右键 在安装IDEA或其它Intellij软件时,因为整个安装流程都是英文的环境,有童鞋稍不注意,就会把Intellij系列软件自动生成鼠标右键给选上 但问题来了,Intellij系列软件 ...

  5. ps top命令查看内存空间

    [root@VM-4-3-centos local]# ps aux --sort -rss | head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME ...

  6. PowerBI_一分钟了解POWERBI计算组_基础运用篇(一)

    在第一篇计算组的文章中,给大家介绍了,POWERBI的计算组功能的基本概念和作用. 本文,旨在通过简单案例,介绍计算组功能的具体应用场景. 没有看过第一篇的同学,可以先简单过一下第一篇,补齐一下概念和 ...

  7. ElasticSearch多语义命令在query和aggregation中的区别

    初学ES时,有两个较为特殊的命令让我困惑 terms 在query中使用terms,代表匹配多个查询条件 在aggregation中使用terms,代表按指定filed进行groud by分组聚合 f ...

  8. 【长文】带你搞明白Redis

    本文使用第一人称来介绍Redis 一.概述 Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...

  9. 牛客小白月赛96(待F)

    比赛链接:牛客小白月赛96 赛时感受 赛时在前面卡的时间有点长,C题没开longlong wa了n发,D题没考虑负数又wa了n发,然后来写E的时候时间就不长了,匆忙写一次交一发. A 思路 当其中一个 ...

  10. CLR via C# 笔记 -- 可空值类型(19)

    1. 值类型的变量永远不会为null,所有需要使用System.Nullable<T> 2. 操作数是null,结构是null:==.!=操作数都为null,则返回true:<.&g ...