文章目录

  • 一、Promise概念
    • 1、Promise的含义
    • 2、Promise状态
  • 二、Promise的创建
  • 三、Promise的方法
    • thenable 对象
  • 总结

一、Promise概念

1、Promise的含义

  • promise 是承诺的意思,其背后的核心思想是,承诺表示异步操作的结果。
  • promise是js异步编程提供的解决方案,主要用来解决回调地域问题。

2、Promise状态

Promise有三种状态,分别是

  • Pending(进行中) 初始状态
  • Fulfilled (已成功) 意味着操作成功
  • rejected (已失败) 意味着操作失败

注意:Promise对象的三种状态,不受外界的影响,只有promise中存放的将来会结束的事件才会影响。也就是只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态
Promise状态一旦改变、不可逆

  • Pendding(进行中)状态可以转变为Fulfilled(已成功)状态
  • Pendding(进行中)状态可以转变为 rejected(已失败)状态

promise只有这两种情况发生状态改变,一旦发生这两种状态改变,那么状态就凝固了,会一直保持这个结果。

二、Promise的创建

1、创建一个新的Promise对象
需要传入一个回调函数,回调函数有2个参数,分别代表resolve(解决),reject(拒绝),并且两个参数都是函数

  • 如果两个参数都不调用,默认pending状态
let promise=new Promise(function(resolve,reject){});//pending状态
  • 调用resolve 函数,代表Promise的状态,会从pending==>fulfilled
let promise=new Promise(function(resolve,reject){resolve();
});//fulfilled状态
  • 调用reject函数,代表Promise的状态,会从pending==>rejected
let promise=new Promise(function(resolve,reject){reject();
});//rejected 状态

2、创建一个状态为fulfilled 的Promise对象
Promise. resolve();

let p=Promise.resolve("ok");p.then(res=>{console.log(res)})//ok

3、 创建一个状态为rejected 的Promise对象
Promise.reject();

let p1=Promise.reject("error");p1.catch(res=>{console.log(res)})//error

三、Promise的方法

promise中提供了then 和catch 两个方法
分别用来处理 已成功和已失败的状态。
then和catch方法的参数也是一个函数,而且这个函数返回都是一个新的promise对象。

  • 如果promise状态为fulfilled ,则调用then方法来处理对应的成功的逻辑
let promise=new Promise(function(resolve,reject){resolve();});//fulfilled状态
promise.then(function(){console.log("事情已被解决---")})
  • 如果promise 状态为rejected 。则调用catch 方法来处理对应的失败的逻辑
let promise=new Promise(function(resolve,reject){reject();});//rejected状态
promise.catch(function(){console.log("事情失败了---")})

resolve, reject 可以在设置状态的同时可以传递1个数据(最多一个)。给then / catch

let promise=new Promise(function(resolve,reject){reject("error");// resolve("ok");});
let s1=promise.then(function(s){console.log("事情已被解决---",s)})//事情已被解决--- ok
let s1=promise.catch(function(s){console.log("事情失败了---",s)})//事情失败了---error
  • then和catch 在函数中可以return 一个值, 如果没有return 默认代表return undefiend,例如上面两段代码。
  • 1.如果return 的是一个非Promise 对象
    那么会通 过Promise.resolve()将返回的值转成一个状态为fulfilled 的Promise对象
promise.catch(function(s){console.log("事情败露了---",s)return new Promise(function(resolve,reject){resolve("ss");});});//fulfilled状态
  • 2.如果return 的是一个Promise 对象
    则返回一个新的Promise 对象,该promise对象的状态由返回的promise对象的状态决定。
promise.catch(function(s){return new Promise(function(resolve,reject){reject("ss");});});//rejected状态

thenable 对象

thenable 对象指的是对象中,有一个then对象

let obj={name:"zhangsan",then(s){console.log(this.name,s)}}
let p3=Promise.resolve(obj);

总结

promise就是一个容器,里面存放的是将来才会结束的事件(异步请求)。

注意:

  • then和catch 代码执行时间:在本轮事件结束后,才执行的代码。
  • settimeout()代码执行时间 :在本轮事件结束后,下轮事件开始,才执行的代码。

ES6-promise详解相关推荐

  1. ES6 Promise详解

    Promise是JS中进行异步编程的新解决方案. 从语法上来说:Promise是一个构造函数 从功能上来说:promise对象用来封装一个异步操作并可以获取其成功/失败的结果值 promise:启动异 ...

  2. JS 的 Promise详解

    @[TOC](JS 的 Promise详解)欧诺个鱼 1.概念 ES 6 开始支持 Promise. Promise 对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示.简而言之,就是处理 ...

  3. angular $q promise详解

    前言 通过本文,你大概能清楚angular promise是个啥,$q又是个啥,以及怎么用它.这里咱们先灌输下promise的思想. 下面写的全是废话,一些看着高逼格其实没什么大作用的概念,想知道$q ...

  4. promise 详解

    Promise 作用:主要是来解决Ajax的异步问题 传统方式:回调函数来解决异步问题,类似如下问题 ajax(url, {// 成功后回调ajax(url, {// 成功之后再回调ajax(url, ...

  5. javaScript中Promise详解

    ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范.作为ES6中最重要的特性之一,我们有必要掌握并理解透彻.本文将由浅到深,讲解Promise的基本概念与使用方法 ...

  6. ES6中的Promise详解

    Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷. 定义 Promise 是一个对象,它用来标识 JavaScri ...

  7. ES6 中 Promise 详解

    博客地址:https://ainyi.com/16 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获 ...

  8. NodeJS基础2---2 Promise详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.ES6的Promise语言标准.Promise/A+规范 1.Promise是Js针对异步场景的解决方案. Promise ...

  9. Promise详解(一) ----基础用法

    什么是Promise Promise是由社区最早提出并实现的,后加入到es6规范中.为更好处理javascript异步问题,用于解决其多次异步回掉嵌套问题.下面先尝试下promise的基础用法吧. 创 ...

  10. 关于Promise详解

    异步回调 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完成后才能执行后续的任务 ...

最新文章

  1. Tomcat项目部署
  2. python映射类型包括哪三种_python新手入门必备——映射类型相关函数
  3. Spring中毒太深,离开Spring我居然连最基本的接口都不会写了
  4. pandas 中的函数—— .reset_index()
  5. MySQL(1)数据库介绍,配置MySQL的tab补全
  6. 大数据:Parquet文件存储格式
  7. ktv 上传图片 1218
  8. nginx添加nginx_mod_h264_streaming-2.2.7模块编译报错
  9. Error in loadNamespace(name) : there is no package called ‘yaml’
  10. @Scope作用域代理的应用:@RefreshScope注解实现动态刷新配置的底层原理与实现
  11. 网上阅卷系统服务器,网上阅卷系统是什么?
  12. jquery将html转换word,将网页内容导出word文档jQuery插件
  13. 如何填写台式计算机参数,教你如何看懂电脑各配置参数
  14. 机房合作—SVN skipped remains conflicted
  15. latex怎么打区间_latex 函数中间点
  16. 百度地图API,授权失败,错误码:240
  17. 基于python的明日方舟自动刷取理智的脚本(一)—— 初始化环境
  18. 常见网络安全产品汇总(私信发送思维导图)
  19. eth一张_千呼万唤的以太坊20到底启动了!你们据有32个ETH吗?
  20. dede修改mysql用户名密码_老李教你快速学会织梦dedecm后台修改帐号密码教程

热门文章

  1. ue4之将Sequence嵌入蓝图
  2. 一场跨越时空的协奏:编钟、古琴与5G的“弦外之音”
  3. 校验、加密、压缩、哈希值的区别,我老是弄混,现在总结一下
  4. 回收站的文件删了怎么恢复,回收站文件恢复的两种方法
  5. 大数据发展与情报资源整合的关系探索
  6. 你不知道的JavaScript(上卷)- - 书本知识点记录
  7. android文档在线批注,文档批注
  8. 信度和效度经典例子_信度、效度、难度、区分度之间有何不同?
  9. 微信戴圣诞帽的一个简易实现程序
  10. python简易版成绩管理系统_Python学生成绩管理系统简洁版