ES6-promise详解
文章目录
- 一、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详解相关推荐
- ES6 Promise详解
Promise是JS中进行异步编程的新解决方案. 从语法上来说:Promise是一个构造函数 从功能上来说:promise对象用来封装一个异步操作并可以获取其成功/失败的结果值 promise:启动异 ...
- JS 的 Promise详解
@[TOC](JS 的 Promise详解)欧诺个鱼 1.概念 ES 6 开始支持 Promise. Promise 对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示.简而言之,就是处理 ...
- angular $q promise详解
前言 通过本文,你大概能清楚angular promise是个啥,$q又是个啥,以及怎么用它.这里咱们先灌输下promise的思想. 下面写的全是废话,一些看着高逼格其实没什么大作用的概念,想知道$q ...
- promise 详解
Promise 作用:主要是来解决Ajax的异步问题 传统方式:回调函数来解决异步问题,类似如下问题 ajax(url, {// 成功后回调ajax(url, {// 成功之后再回调ajax(url, ...
- javaScript中Promise详解
ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范.作为ES6中最重要的特性之一,我们有必要掌握并理解透彻.本文将由浅到深,讲解Promise的基本概念与使用方法 ...
- ES6中的Promise详解
Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷. 定义 Promise 是一个对象,它用来标识 JavaScri ...
- ES6 中 Promise 详解
博客地址:https://ainyi.com/16 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获 ...
- NodeJS基础2---2 Promise详解
2019独角兽企业重金招聘Python工程师标准>>> 一.ES6的Promise语言标准.Promise/A+规范 1.Promise是Js针对异步场景的解决方案. Promise ...
- Promise详解(一) ----基础用法
什么是Promise Promise是由社区最早提出并实现的,后加入到es6规范中.为更好处理javascript异步问题,用于解决其多次异步回掉嵌套问题.下面先尝试下promise的基础用法吧. 创 ...
- 关于Promise详解
异步回调 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完成后才能执行后续的任务 ...
最新文章
- Tomcat项目部署
- python映射类型包括哪三种_python新手入门必备——映射类型相关函数
- Spring中毒太深,离开Spring我居然连最基本的接口都不会写了
- pandas 中的函数—— .reset_index()
- MySQL(1)数据库介绍,配置MySQL的tab补全
- 大数据:Parquet文件存储格式
- ktv 上传图片 1218
- nginx添加nginx_mod_h264_streaming-2.2.7模块编译报错
- Error in loadNamespace(name) : there is no package called ‘yaml’
- @Scope作用域代理的应用:@RefreshScope注解实现动态刷新配置的底层原理与实现
- 网上阅卷系统服务器,网上阅卷系统是什么?
- jquery将html转换word,将网页内容导出word文档jQuery插件
- 如何填写台式计算机参数,教你如何看懂电脑各配置参数
- 机房合作—SVN skipped remains conflicted
- latex怎么打区间_latex 函数中间点
- 百度地图API,授权失败,错误码:240
- 基于python的明日方舟自动刷取理智的脚本(一)—— 初始化环境
- 常见网络安全产品汇总(私信发送思维导图)
- eth一张_千呼万唤的以太坊20到底启动了!你们据有32个ETH吗?
- dede修改mysql用户名密码_老李教你快速学会织梦dedecm后台修改帐号密码教程