Promise

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。它最早由社区提出并实现,ES6将其写进了语言标准,统一了用法,并原生提供了Promise对象。

特点

1.对象的状态不受外界影响 (3种状态)

Pending状态(进行中)
Fulfilled状态(已成功)
Rejected状态(已失败)

2.一旦状态改变就不会再变 (两种状态改变:成功或失败)

Pending -> Fulfilled
Pending -> Rejected

用法

创建Promise实例

let promise = new Promise(function(resolve, reject){// 你自己的异步逻辑代码if (/* 异步操作成功 */) {resolve(value);} else { // 异步操作失败reject(error);}
})

  Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolvereject。它们是两个函数,由JavaScript引擎提供,不用自己部署。

  resolve作用是将Promise对象状态由“未完成”变为“成功”,也就是Pending -> Fulfilled,在异步操作成功时调用,并将异步操作的结果作为参数传递出去;
  而reject函数则是将Promise对象状态由“未完成”变为“失败”,也就是Pending -> Rejected,在异步操作失败时调用,并将异步操作的结果作为参数传递出去。

then

  Promise实例生成后,可用then方法指定一种状态回调参数:

1.Promise对象状态改为Resolved时调用 (必选)

备注:通俗的讲 resolve => then

catch

  Promise实例生成后,可用catch方法指定一种状态回调参数:
1.Promise对象状态改为Rejected时调用 (可选)

备注:通俗的讲 reject => catch

基本用法示例

function sleep(num) {return new Promise(function(resolve, reject) {if (num>10){resolve('成功')                      } else {reject('失败')     }  })
}
sleep(500).then( res=> console.log(res)).catch(err => console.log(err));

  这段代码定义了一个函数sleep,调用后,如果传入的实参大于10,你会发现他会触发then的回调函数,并且打印出成功,如果传入的实参小于10,你会发现他会触发catch的回调函数,并且打印出失败。

执行顺序

  接下来我们探究一下它的执行顺序,看以下代码:

let promise = new Promise(function(resolve, reject){console.log("AAA");resolve()
});
promise.then(() => console.log("BBB"));
console.log("CCC")// AAA
// CCC
// BBB

执行后,我们发现输出顺序总是
AAA -> CCC -> BBB。表明,在Promise新建后会立即执行,所以
首先输出 AAA。然后,then方法指定的回调函数将在当前脚本所有同步任务执行完后才会执行,所以BBB 最后输出。

与定时器混用

  首先看一个下面的代码:

let promise = new Promise(function(resolve, reject){console.log("1");resolve();
});
setTimeout(()=>console.log("2"), 0);
promise.then(() => console.log("3"));
console.log("4");// 1
// 4
// 3
// 2

可以看到,结果输出顺序总是:
1 -> 4 -> 3 -> 2。1与4的顺序不必再说,而2与3先输出Promise的then,而后输出定时器任务。原因则是Promise属于JavaScript引擎内部任务,而setTimeout则是浏览器API,而引擎内部任务优先级高于浏览器API任务,所以有此结果。

Promise简单用法相关推荐

  1. promise的状态值_ES6中的Promise的用法总结

    第一部分.什么是Promise ? Promise是ES6中提供的一个异步编程的解决方案,Promise本身是一个构造函数 typeof Promise //function 一般情况下 我们在开发中 ...

  2. ES6 — Promise基础用法详解(resolve、reject、then、catch,all,)

    ES6 - Promise基础用法详解 Promise 是一个构造函数,它自身拥有all.reject.resolve这几个眼熟的方法, 原型上有then.catch等同样熟悉的方法. 所以,在开始一 ...

  3. 前端js进阶之ES6 Promise(承诺)用法小结笔记、详细解释(resolve,catch,catch)历史最通俗易懂的承诺

    什么是Promise? 英文翻译:承诺! js里: Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all.reject.resolve这几个方法,原型上有then.catch ...

  4. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  5. QCustomPlot的简单用法总结

    QCustomPlot的简单用法总结 第一部分:QCustomPlot的下载与安装 第二部分:QCustomPlot在VS2013+QT下的使用 QCustomPlot的简单用法总结    写在前面, ...

  6. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

  7. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  8. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  9. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

最新文章

  1. [HTML]JS添加表格
  2. jQuery $.ajax传递数组的traditional参数传递必须true 对象的序列化
  3. 生产上oracle扩展表空间,oracle基于裸设备(raw device)扩充表空间
  4. oracle快捷语句框架中,Oracle框架:PL/SQL编程:
  5. [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)
  6. Java-Tomcat 5.5 下的JNDI
  7. python安装xlrd和xlwt及应用
  8. WindowsAPI中W和A的区别
  9. latex 中表格怎么指定编号_在医学论文中,应用表格怎么用才是正确的?
  10. aic值检验 p值_23. 假设检验的时候为什么常写p lt; 0.05,而不写具体的p值?
  11. 热烈祝贺龙芯Loongarch OpenJDK8开源,已编译完成
  12. Prometheus正式从CNCF毕业
  13. java解析字符串_java 拼接字符和解析字符串
  14. 微信表情包 php,教你用PS给你的室友做一套动态微信豪华表情包
  15. 解决IDEA报Unmapped Spring configuration files found.Please configure Spring facet
  16. vscode文件管理只有文件夹的时候也层级显示
  17. 在多个QQ号码间共享自定义表情(转)
  18. keras使用load_weights遇到报错
  19. vue入门之04-生命周期 数据共享
  20. 在纽约寻找童真——新泽西州乐高乐园探索中心的美好一天

热门文章

  1. Labview之子面板的使用
  2. 初中能自学c语言么,我是初中生想自学计算机编程,需要什么
  3. Huffman 编码原理详解(代码示例)
  4. 一键重装Win10图文版教程
  5. 开源数字化校园 CoolSchool即将启动
  6. 计算机哪个专业对学历要求比较低,高考成绩一般,适合报考的五大专业,学历要求低、好找工作又体面...
  7. 微信群(腾讯专用服务器),把全国13亿人拉到一个微信群能实现吗?腾讯如此回应.......
  8. python脚本——selenium自动化执行一些网页上的操作
  9. matlab Simscape资料
  10. 如何用化学软件预测核磁共振