Promise对象

Promise 表示一个异步操作的最终结果,与之进行交互的方式主要是 then 方法,该方法注册了两个回调函数,用于接收 promise 的终值或本 promise 不能执行的原因。

Promise 的状态

一个 Promise 的当前状态必须为以下三种状态中的一种:等待态(Pending)执行态(Fulfilled)拒绝态(Rejected)

  • 异步操作未完成(pending)
  • 异步操作成功(fulfilled)
  • 异步操作失败(rejected)

基本用法

Promise是一个构造函数,Promise接收一个参数,这个参数是函数,同时这个参数函数要传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。

Promise对象上有then、catch等方法

var getAjax = function (url) {
const promise=new Promise(function(resolve,reject){
var xhr=new XMLHttpRequest()
xhr.onreadystatechange=function(){
if(xhr.readyState!==4){
return
}
if(xhr.status===200){
resolve('成功时调用resolve函数,并返回一个Promise对象')
}else{
reject(new Error(xhr.statusText))
}
}
xhr.open('GET',url)
xhr.send()
})
return promise//返回promise对象
}
getAjax('./ajax.html')
.then((data)=>{
console.log('第一个参数: '+ data)//打印resolve函数传递的参数
return ('第一个then的第一个参数')//返回一个Promise对象并将数据传递给下一个then
},(data)=>{
console.log('第二个参数: '+ data)//打印reject函数传递的参数
return('第一个then的第二个参数')//返回一个Promise对象并将数据传递给下一个then
}
)
.then((data)=>{
//如果刚开始在getAjax函数中是调用reject函数,第一个then方法才会执行第二个参数,但是后面的then方法只执行第一个参数
console.log('第一个参数: '+ data)//打印上一个then方法传递的参数
return ('第二个then的第一个参数')
},(data)=>{
console.log('第二个参数: '+ data)
return ('第二个then的第二个参数')
}
)
.then((data)=>{
console.log('第一个参数: '+ data)
},(data)=>{
console.log('第二个参数: '+ data)
}
)

异步操作成功时调用resolve:

异步操作失败时调用reject:

总结:

  • Promise是一个构造函数,通过new命令创建promise对象。在创建对象的时候传递一个参数,这个参数是一个函数,这个函数有两个参数,这两个参数分别是resolve和reject,它们是两个函数,由 JavaScript 引擎提供,不用自己实现。成功时调用resolve方法,失败时调用reject方法。

  • 在promise对象上有then方法,这个方法可以传递两个参数,这两个参数是函数。

  • 如果调用resolve函数,就会调用then方法的第一个参数。如果调用的是reject函数,就会调用then方法的第二个参数。不管第一个then调用第一个参数还是第二个参数,第一个then方法后面的then方法都会执行第一个参数。

  • resolve方法和reject方法需要带参数,这个参数会传递给then方法对应的参数 。在then方法中返回数据时,可以传递给下一个then方法。

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

  1. Javascript - Promise学习笔记

    最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下.   一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编 ...

  2. Promise 学习笔记 - 时间支配者

    本文同步自我的个人博客:http://www.52cik.com/2015/11/08/promise.html JavaScript 的 promises 事实标准称为 Promises/A+.ES ...

  3. JavaScript之Promise学习笔记

    一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...

  4. js的Promise学习笔记(1)

    1: 何为Promise Promise是抽象异步处理对象以及对其对象进行各种操作的组件,是基于并列/并行处理设计的一种编程语言. 说到基于JavaScript的异步处理,大多数都会想到利用回调函数. ...

  5. Promise 学习笔记

    所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API, ...

  6. Javascript Promise 学习笔记

    1.     定义:Promise是抽象异步处理对象以及对其进行各种操作的组件,它把异步处理对象和异步处理规则采用统一的接口进行规范化. 2.     ES6 Promises 标准中定义的API: ...

  7. ES6 promise学习笔记 -- 基本用法

    ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...

  8. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  9. WeX5学习笔记

    目录 WeX5学习笔记... 1 1.轻松看透WeX5产品能力和技术... 1 2.WeX5可以怎么玩?... 3 一.纯本地App. 3 二.关联一个网站,希望默认就打开某页... 4 三.UI设计 ...

随机推荐

  1. 2018.12/6 js键盘事件 DOM:0级2级

    DOM0级事件元素绑定多个click最后只执行最后一个click. DOM2级事件元素绑定多个click,都要执行 注意当绑定的多个事件名,函数名,事件发生阶段三者完全一样时,才执行最后一个 div. ...

  2. 【代码笔记】Web-CSS-CSS Positioning

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. #WEB安全基础 : HTML/CSS | 0x10实现交互_表单

    先看看表单如何工作吧 请求   响应   简要工作流程: 浏览器加载页面 用户输入数据 用户提交表单 服务器响应 概念都清楚了,我们来写表单吧 只有一个html文件   这是显示   你可以向空白框框 ...

  4. 设置抓包工具Fiddler的host

    大家都知道在电脑本地上有一个Host文件. Hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定.可以用文本文件打开!当用户在浏览器中输入一个需要登录的网址时,系统 ...

  5. Android中将一个图片切割成多个图片

    有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...

  6. WordCount结对项目

    合作者:201631062124,201631062423 代码地址:https://gitee.com/yryx/WordCount 作业地址:https://edu.cnblogs.com/cam ...

  7. Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理

    一. 概述 上一篇我们介绍了如何将数据从mysql抛到kafka,这次我们就专注于利用storm将数据写入到hdfs的过程,由于storm写入hdfs的可定制东西有些多,我们先不从kafka读取,而先 ...

  8. Sql Server 获取本周周一

    SELECT DATEADD(Day,(@i+1)-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())

  9. Python变量之白首如新,倾盖如故

    python中的变量变量:将运算的中间结果暂存到内存中,方便后续程序调用.变量的命名规则:1.变量名由字母.数字.下划线组成.2.变量名可以用字母.下划线开头,但是不能以数字开头.3.变量名是区分大小 ...

  10. 为Arch Linux更换Archlinuxcn源(清华源)

    上一篇随笔 archlinux切换官方中国源 里面写了如何切换到官方的中国源,但是因为那个源有一些软件并没有,特别是一些国人常用的中文软件,比如搜狗输入法等这些都是没有的.所以我们现在需要手动切换源一 ...