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

  

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

  

封装一个简易的Promise公用方法:
  1. function getPromise(url) {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve(url)
  5. })
  6. })
  7. }
  8.  
  9. getPromise('a.json')
  10. .then(res => {
  11. console.log(res);
  12. return getPromise('b.json');
  13. })
  14. .then(res => {
  15. console.log(res);
  16. return getPromise('c.json');
  17. })
  18. .then(res => {
  19. console.log(res);
  20. })

  

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

  

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

  

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. JAVA 猜拳游戏

    JAVA 猜拳游戏 题目:通过控制台方式实现一个人机对战的猜拳游戏 用户通过输入(0.石头子 1.剪刀 2.布),机器随机生成(0.石头子 1.剪刀 2.布) 要求: 能打印玩家的对局信息,胜利的次数 ...

  2. Linux CentOS7.X-文件操作命令

    一.文件新增,touch 1.touch fileName,其中fileName表示文件名称,代表创建一个空文件: 2.touch fn1 fn2 fn3....fnn,其中fn1至fnn表示n个不同 ...

  3. Linux下面怎么安装PHP扩展?

    一般开发环境都是在windows上, 安装扩展也很容易, 直接把下载的.dll文件扔到ext下面, 改一下php.ini文件. 完事了. linux上有两种安装方法 1.编译安装 //下载文件 #wg ...

  4. Redis安装——windows版

    下载地址   : https://github.com/MicrosoftArchive/redis/releases/tag/win-3.2.100 双击进行安装,然后将安装目录配置到环境变量里,打 ...

  5. Clickhouse中的预聚合引擎

    作者: LemonNan 原文地址: https://mp.weixin.qq.com/s/qXlmGTr4C1NjodXeM4V9pA 注: 转载需注明作者及原文地址 介绍 本文将介绍 Clickh ...

  6. 03 Java的数据类型分为两大类 类型转换 八大基本类型

    数据类型 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型分为两大类 基本类型(primitive type) 数值类型 整数类型 byte占1个字节范围: ...

  7. instanceOf与父子类型转换

    instanceOf 只要有父子类关系,sout(A instanceOf B)结果就位ture,反之false 先前定义 class Person ; method calss Father ; m ...

  8. XSS 32个触发事件

    标签: 1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseenter="ale ...

  9. struts-032利用工具 PythonGUI

    # -*- coding: utf-8 -*- import requests from Tkinter import * class App: def __init__(self, master): ...

  10. 无传感FOC控制中的转子位置和速度确定方法一

    使用PLL估算器在无感的情况下,估计转子的角度和角速度 PLL估算器的工作原理基于反电动势的d分量在稳态下等于零,其框图如下: ΚΦ 表示电压常量,下面给出了电气转速计算中使用的归 一化 ΚΦ  : ...