ES6—Promise简介(一)

1,Promise简介

Promise是JS异步编程的一种解决方案,比传统的解决方案(回调函数和时间)更合理且更加强大。主要用来解决回调地狱问题,Promise是一个容器,里面存放的是将来才会结束的事件(异步请求)。

2,Promise状态

Promise共有三种状态

pending:进行中
fulfilled:已成功
reject:已失败

注:

  • Promise对象的三种状态,不受外界的影响,只有Promise中存放的将来会结束的事件才会影响。
  • Promise状态一旦改变,将不可逆
    pending ==> fulfilled
    pending ==> rejected

3,Promise对象的创建

Promise是一个构造函数,在创建对象的时候,需要传入一个回调函数,回调函数有两个参数,分别代表resolve(解决),reject(拒绝),并且都是函数。

  • 当调用resolve 函数,代表Promise的状态会从Promise ==>fufilled
  • 当调用reject函数,代表Promise的状态会从Promise ==>rejected
    resolve 和 reject可以在设置状态的同时,可以传递一个数据(最多一个数据),给 then 和 catch。

Promise共有三种创建方式:

//最常用的创建方式
let promise = new Promise(function(resolve,reject){
	
})
//直接创建一个成功的Promise对象
let pro = Promise.resolve("OK");
pro.then(function(ok){
	console.log(ok);//OK
})
//直接创建一个失败的Promise对象
let pro = Promise.reject("Error");
pro.catch(function(error){
	console.log(error);//Error
})

4,thenable对象

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

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

5,then和catch方法

Promise中提供了then和catch两种方法,分别用来处理 已成功已失败 的状态。

  • 如果Promise状态为fuifilled,则调用then方法来处理对应成功的逻辑。
  • 如果Promise状态为rejected,则调用catch方法来处理对应失败的逻辑。
let promise = new Promise((resolve,reject) => {
	//resolve 和 reject 不能同时出现,如果同时出现,将只会执行第一个状态。
	//因此,本段代码只会执行resolve。
	resolve("OK");//代表成功,执行then方法
	reject("Error");//代表失败,执行catch方法
})
promise.then(function(s){
	console.log("事情已被解决",s);//事情已被解决 OK
})
promise.catch(function(s){
	console.log("事情没有被解决",s);//事情没有被解决 Error
})

then 和 catch 方法的参数也是一个函数,而且这个函数的返回的都是一个全新的Promise对象。

then 和 catch 在函数中可以return一个值,如果没有return,默认代表return undefiend。

  1. 如果return的是一个非Promise对象,那么会通过Promise.resolve()将return的值转成一个状态为fuifilled的Promise对象。
  2. 如果return的是一个Promise对象,则返回一个新的Promise对象,该Promise对象的状态由return的Promise的对象状态决定。

then 和 catch方法代码的执行时间:在本轮事件结束后才执行的代码。
setTimeout()代码执行时间:本轮事件结束,下轮事件开始的时候执行。
所以,then 和 catch 方法要先于setTimeout()执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值