文章目录
前言
本文简要介绍了Promise对象中的基础内容。
一、Promise的含义
1.Promise作用
Promise是JS为异步编程提供的解决方案、主要用来解决回调地域问题。简单来说,Promise是一个容器,里面存放的是将来才会结束的事件(异步请求)。
2.Promise的三种状态
Pending | 进行中 |
---|---|
Fulfilled | 已成功 |
Rejected | 已失败 |
3.Promise的特点
- Promise对象的三种状态,不受外界的影响,只有Promise中存放的
将来会结束
的事件才会影响。 - Promise状态一旦改变、
不可逆
。
二、基础用法
1.创建一个Promise 对象
- ES6规定,Promise对象是一个构造函数,在创建对象的时候,需要传入一个回调函数;
- 回调函数有2个参数,分别代表
resolve
(解决),reject
(拒绝),并且都是函数; - 调用resolve 函数,代表Promise的状态会从Pending ==> fulfilled
调用reject 函数,代表promise的状态会从Pending ==> rejected
let promise = new Promise(function(resolve,reject){
//主要编写的是 将来会结束的事件代码(异步请求)
//调用resolve 函数
resolve();
//调用reject 函数
//reject();
});
console.log(promise);//promise的状态是fulfilled
若调用reject 函数,promise的状态变成rejected
2.Promise中then和catch方法
- promise中提供了then和catch两个方法,分别用来处理 已成功和已失败的状态;
- 如果promise 状态为fulfilled ,则调用then方法来处理对应的成功的逻辑;
如果promise状态为rejected ,则调用catch 方法来处理对应的失败的逻辑; - then和catch 方法的参数也是一个函数,而且这个方法返回的都是一个新的Promise对象;
- then和catch 在函数中可以return 一个值,如果没有 return 默认代表返回undefiend;
- 如果return的是一个非promise 对象,那么会通过Promise.resolve()将返回的值转成一个状态为fulfilled 的Promise对象;
如果return的是一个promise 对象,则返回一个新的promise对象,该promise对象的状态 由返回的Promise对象状态来确定。
代码如下(示例):
let promise = new Promise(function(resolve,reject){
//调用resolve 函数
resolve("ok");
//reject("error");
});
setTimeout(function() {
console.log("++++++++++++++")
}, 0);
let s1 = promise.then(function(s){
console.log("解决~~",s)
}).catch(function(s){
console.log("失败~~",s)
s3 = new Promise((resolve,reject) =>{
resolve("ss")
});
return s3;
})
/*控制台返回 :
解决~~ ok
++++++++++++++
- resolve,reject 可以在设置状态的同时 传递1个数据(最多1个数据)给 then / catch
- then和catch代码执行时间是在本轮事件结束后,才执行的代码;
setTimeout()代码执行时间是本轮事件结束、下轮事件开始的时候。
3.Promise中resolve 和reject方法
-
Promise 创建对象的三种方式
-
方法一:创建Promise最常用的方式
new Promise( (resolve ,reject) =>{})
- 方法二:创建一个状态为fulfilled的Promise 对象
Promise.resolve();
- 方法三:创建一个状态为rejected 的 Promise对象
Promise.reject();
代码示例:
let p = Promise.resolve("ok")
p.then(res =>{
console.log(res)
})
let p2 = Promise.reject("error");
p2.catch(error =>{
console.log(error)
})
//thenable 对象
/**
* thenable 对象 指的是对象中, 有一个then对象
*/
let obj = {
name:"zhangsan",
then(s){
console.log(this.name)
}
}
let p3 = Promise.resolve(obj);
总结
今天简要介绍到这里,希望对读者有所帮助。