博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Promise学习笔记
阅读量:6325 次
发布时间:2019-06-22

本文共 2053 字,大约阅读时间需要 6 分钟。

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方法。

转载于:https://juejin.im/post/5b764e18e51d4555c14070e9

你可能感兴趣的文章
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
查看>>
并查集的应用之求解无向图中的连接分量个数
查看>>
7个神奇的jQuery 3D插件
查看>>
在线浏览PDF之PDF.JS (附demo)
查看>>
波形捕捉:(3)"捕捉设备"性能
查看>>
AliOS Things lorawanapp应用介绍
查看>>
美国人的网站推广方式千奇百怪
查看>>
Linux signal 那些事儿(4)信号的deliver顺序【转】
查看>>
小猿搜题如何发现竞品的阴谋?知情人这样说
查看>>
AMD正式向N卡宣战:份额有信心重回55开
查看>>
Mac OS X 数据库 管理工具 无需破解navicat 用Valentina Studio
查看>>
TensorFlow 与 Apache Spark 结合:雅虎开源“TensorFlowOnSpark”
查看>>
HDS以乐高积木思路构建其超融合型解决方案
查看>>
融合数据保护产品评估三要素
查看>>
MySQL向GraphQL迁移
查看>>
猎豹移动任命范承工为CTO 加速在硅谷扩张计划
查看>>
通信基础设施正日趋完善 通信网络安全面临更大挑战
查看>>
php中处理汉字字符串长度:strlen和mb_strlen
查看>>
那个做投票社交的“纠纠”开始推出双人CP直播
查看>>
《规范敏捷交付:企业级敏捷软件交付的方法与实践》——1.7 是IT解决方案,而不只是软件...
查看>>