Promise是ES6异步编程解决方案之一,简化以前ajax的嵌套地狱,增加代码可读性。
 
基本用法:
resolve,成功
reject,失败
let p = new Promise((resolve, reject) => {
// Promise里面的非异步代码是立刻执行
console.log(1);
setTimeout(() => {
if (true) {
resolve('成功')
} else {
reject('失败')
}
})
})
console.log(2);
p.then((res) => {
console.log(3);
console.log(res);
}).catch((e) => {
console.log(e);
})

  

Promise的三种状态,三种状态是不可逆的:
new Promise:pending
resolve:fulfilled
reject:rejected
 
下面代码输出2,永远不会输出1,所以状态不可逆
let p2 = new Promise((resolve, reject) => {
reject(2);
resolve(1);
})
p2.then(res => {
console.log(res);
}).catch(e => {
console.log(e);
})

  

封装一个简易的Promise公用方法:
function getPromise(url) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(url)
})
})
} getPromise('a.json')
.then(res => {
console.log(res);
return getPromise('b.json');
})
.then(res => {
console.log(res);
return getPromise('c.json');
})
.then(res => {
console.log(res);
})

  

Promise静态方法
Promise.resolve()
Promise.reject()
Promise.all()
Promise.race()
 
使用all来一次性执行多个Promise
all方法里面只要有一个Promise失败,那么所有都失败直接进入catch里面
Promise.all(
[
getPromise('1.json'),
getPromise('2.json'),
getPromise('3.json')
]
).then(res => {
console.log(res); // 所有Promise的res拼接成数组
})

  

race,比速度
只要其中一个Promise完成,那么就会认为整个都完成
只要有一个失败,跟all一样认为所有都失败
Promise.race(
[
getPromise('1.json'),
getPromise('2.json'),
getPromise('3.json')
]
).then(res => {
console.log(res); // 返回第一个完成的Promise的res
})

  

ES6-11学习笔记--Promise的更多相关文章

  1. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  2. es6学习笔记--promise对象

    Promise对象是为了简化异步编程.解决回调地狱情况 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可 ...

  3. es6.3学习笔记

    es版本发布相当快,从1.x到2.x,再直接到5.x,6.x 索引这个词在es中有多重意思: 索引(名词):一个索引类似于传统数据库中的一个索引,用于存储关系型文档.索引的复数为indexes或ind ...

  4. ES6 - 基础学习(8): Promise 对象

    概述 Promise是异步编程的一种解决方案,比传统的解决方案(多层嵌套回调.回调函数和事件)更强大也更合理.从语法上说,Promise是一个对象,从它可以获取异步操作的消息,Promise 还提供了 ...

  5. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  6. C++11学习笔记

    C++11 1.long long新类型 2.列表初始化 int t=0; int t={0}; int t(0); int t{0}; 注意:如果我们使用列表初始化有丢失信息的风险,则编译器报错 l ...

  7. linux0.11学习笔记(1)

    公布软件包包括内容: bootimage.Z - 具有美国键盘代码的压缩启动映像文件: rootimage.Z - 以1200kB 压缩的根文件系统映像文件: linux-0.11.tar.Z- 内核 ...

  8. JavaScript(ES6)学习笔记-Set和Map数据结构(一)

    一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...

  9. js-ES6学习笔记-Promise对象(2)

    1.Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为Promise实例添加状态改变时的回调函数. 2.Promise.pr ...

随机推荐

  1. LeetCode-099-恢复二叉搜索树

    恢复二叉搜索树 题目描述:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树. 进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出一个只使用 ...

  2. python安装各种插件

    http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip 感受:如果编辑pip真的一直出问题,考虑降成32位的进行安装.毕竟合理搭配比木桶突出有用.

  3. 微信小程序两点之间的距离

    1:申请key: https://lbs.qq.com/dev/console/application/mine 网址: https://note.youdao.com/ynoteshare/inde ...

  4. docker学习(一) - docker简介

    (一)Docker是什么? Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...

  5. 前端面试题(css)

    css  基础面试题 css 面试题 js 面试题 1.介绍下CSS的盒子模型    介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? css 是如何设置这两种模型的 box-si ...

  6. [Java编程思想] 第一章 对象导论

    第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...

  7. JavaWeb 10_Filter过滤器

    一.什么是Filter? 1.Filter 过滤器它是JavaWeb的三大组件之一-.三大组件分别是: Servlet 程序.Listener 监听器.Filter 过滤器2.Filter 过滤器它是 ...

  8. 【OpenHarmony移植案例与原理】XTS子系统之应用兼容性测试用例开发

    摘要:本文主要介绍ACTS应用兼容性测试用例开发编译. 本文分享自华为云社区<移植案例与原理 - XTS子系统之应用兼容性测试用例开发>,作者: zhushy . XTS(X Test S ...

  9. phpcms手工注入教程

    目标服务器(靶机):192.168.1.27 目标网站:http://192.168.1.27:8083 步骤: 一.靶机操作 1.进入靶机,查看IP地址: 开始-运行,输入cmd回车,出现命令行窗口 ...

  10. 📚 队列-DS笔记

    数组队列 数组队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾, ...