彻底搞懂promise
创始人
2024-06-02 07:16:09
0

1、为什么需要Promise

需求

通过AJAX请求id ,再根据id请求用户名.再根据用户名,再根据用户名获取email

回调地狱

回调函数中嵌套回调,Promise的出现主要解决了回调地狱。

Promise 的基本使用

语法

一个构造函数,然后参数是一个函数,函数中有两个行参,resolve, reject

new Promise(( resolve, reject ) =>{})
  • Promise接受一个函数作为参数
  • 在参数函数中有两个形参
    • resolve: 成功函数
    • reject: 失败函数
  • 返回一个promise对象

Promise实例

promise实例有两个属性

  • state: 状态
  • result: 结果

Promise的状态

  • 第一种状态: pending(准备、待解决、进行中)
  • 第二种状态: fulfilled (已完成、成功)
  • 第三种状态: rejected(已拒绝、失败)

Promise的状态的改变

通过调用resolve()和reject() 改变当前promise对象的状态

// 示例1
const p = new Promise((resolve, reject) => {// resolve(): 调用函数, 使当前Promise对象的状态改成fulfilledresolve();
})
console.dir(p) // fulfilled
// 示例2
const p = new Promise((resolve, reject) => {// resolve(): 调用函数, 使当前Promise对象的状态改成fulfilled// reject(): 调用函数, 使当前Promise对象的状态改成rejected// resolve();reject()
})
console.dir(p) 
  • resolve(): 调用函数, 使当前Promise对象的状态改成fulfilled
  • reject(): 调用函数,使当前Promise对象状态改成rejected

Promise状态的改变是一次性的!

Promise 的结果

// 示例
const p = new Promise((resolve, reject) => {// 通过调用 resolve,传递参数,改变 当前Promise对象的结果resolve("成功的结果");// resolve();// reject("失败的结果")
})
console.dir(p)

Promise的方法

then方法

实例1

const p = new Promise((resolve, reject) => {// 通过调用 resolve,传递参数,改变 当前Promise对象的结果// resolve("成功的结果");reject("失败的结果")
})// .then方法包含两个参数,两个参数都是函数,一个成功时执行,一个失败时执行
// 返回值: 是一个Promise对象
p.then(()=>{// 当Promise的状态使fulfilled时执行console.log("成功的回调")
},()=>{// 当Promise的状态时rejected时, 执行console.log("失败时调用")
})
console.dir(p) 

实例2

const p = new Promise((resolve, reject) => {// 通过调用 resolve,传递参数,改变 当前Promise对象的结果// resolve(123);reject("失败的结果")
})//then方法函数
// - 参数
// 两个参数都是函数
// 返回值: 是一个Promise对象
p.then((value)=>{//当Promise的状态使fulfilled时执行console.log("成功的回调",value)
},(err)=>{// 当Promise的状态时rejected时, 执行console.log("失败时调用",err)
})
console.dir(p) 
  • 在then方法的参数函数中,通过形参使用Promise对象的结果

then方法返回一个新的Promise实例,状态是pending

在then方法中,通过return将返回的Promise实例改为fulfilled状态

// 如果Promise的状态不改变,then里的方法不会执行
const p = new Promise((resolve, reject) => {resolve()
})
const t = p.then((value) => {console.log("成功")// 使用return可以将t实例的状态改为fulfilledreturn 123
},(reason) => {
console.log("失败")
})
t.then.((value) => {console.log("成功2",value)
},(reason) => {
console.log("失败2")
})

在then方法中,出现代码错误,将返回的Promise实例改为rejected状态

// 如果Promise的状态不改变,then里的方法不会执行
const p = new Promise((resolve, reject) => {})
const t = p.then.((value) => {console.log("成功")// 使用return可以将t实例的状态改为fulfilled// return 123
},(reason) => {// 如果这里代码出错,会将t实例的状态改为rejected
console.log("失败")
})
t.then.((value) => {console.log("成功2",value)
},(reason) => {
console.log("失败2")
})

catch方法

实例:

const p = new Promise((resolve, reject) => {// reject()// console.log(a)throw new Error("出错了");
})// 思考: catch中的参数函数在什么时候被执行,两种情况:
//  1. 当Promise的状态改为rejcted.被执行
//  2. 当Promise执行过程出现代码错误时,被执行
p.catch((reason => {console.log("失败", reason)
})
console.log(p);

参考:
深入浅出promise
手写promise
笔记
promise-阮一峰

相关内容

热门资讯

分水岭,分水岭伍彬,分水岭的... 分水岭,分水岭伍彬,分水岭的意思,分水岭赏析 -诗词大全 分水岭 作者:伍彬朝代:唐体裁:五律 ...
顾城现代诗作品《黑眼睛》鉴赏 顾城现代诗作品《黑眼睛》鉴赏  【1、作品原文】  黑夜给了我黑色的眼睛  我却用它寻找光明  【2...
《过分水岭》唐诗鉴赏 《过分水岭》唐诗鉴赏  过分水岭  温庭筠  溪水无情似有情,  入山三日得同行。  岭头便是分头处...
描写芍药花的诗句 关于描写芍药花的诗句  在平时的学习、工作或生活中,大家都收藏过令自己印象深刻的诗句吧,诗句一般饱含...
重岩叠嶂,隐天蔽日 “重岩叠嶂,隐天蔽日。”出处 出自 南北朝 郦道元 的《三峡》“重岩叠嶂,隐天蔽日。”全诗《三峡》 ...
“绝代有佳人,幽居在空谷。”... “绝代有佳人,幽居在空谷”这两句是说,佳人幽居在深谷里,容貌是盖世无双的美丽。绝代佳人出场,以“幽居...
用明月表达相思的诗句 用明月表达相思的诗句  牵挂一个人,是分分秒秒的思念,是日日夜夜的期盼。用明月表达相思的诗句有哪些?...
关于赞美大海长江的诗句   关于赞美大海长江的诗句  1、潮平两岸阔,风正一帆悬。  2、瀚海阑干百丈冰,愁云惨淡万里凝。 ...
青铜葵花好词好句好段 关于青铜葵花好词好句好段  在平平淡淡的学习、工作、生活中,大家都收藏过自己喜欢的好词好句吧,好词好...
中秋节古诗 实用的中秋节古诗  中秋节有许多别称:因节期在八月十五,所以称“八月节“、“八月半“;因中秋节的主要...
描写山水风光的经典诗句 描写山水风光的经典诗句  《鹿柴》  空山不见人,但闻人语响。  返景入深林,复照青苔上。  《竹里...
描写荷花多的诗句 描写荷花多的诗句  一池的绿,一池无声的歌,在乡间不惹眼的路边--岂只有哲学书中才有真理?岂只有研究...
古代清官自律诗欣赏 古代清官自律诗九首欣赏  据说,晋代吴隐之受任广州刺吏时路过石门,闻听此处有一“贪泉”,相当灵验。接...
描述雪花的诗句 描述雪花的诗句  1、雪似梅花,梅花似雪,似和不似都奇绝。吕本中《踏莎行》  2、天寒色青苍,北风叫...
有个傻瓜爱过你诗歌 有个傻瓜爱过你诗歌  谁知道能和你又相遇,  未曾开口却已是眼含泪滴,  天空偏偏又下起了雨,  是...
元旦晚会适合朗诵什么   马上就是元旦晚会了,在晚会上朗诵什么诗歌合适呢?小编在这里为您推荐几首:  第一首:  领:大地...
他在梦里为她采莲爱情诗歌 他在梦里为她采莲爱情诗歌  在屋子里 在他的对面  看到那玻璃隔断里 水池里  有一个女人采莲 也许...
诗歌向来缘浅奈何情深 诗歌向来缘浅奈何情深  一个人,  漫无目的游走在伤感文字里。  时光流逝,岁月如歌。  倘佯在青涩...
春望诗歌鉴赏答案 春望诗歌鉴赏答案  《春望》  唐·杜甫  国破山河在,城春草木深。  感时花溅泪,恨别鸟惊心。  ...
建党100年实现伟大复兴的目... 建党100年后的今天,我们比历史上任何时期都更接近、更有信心和能力实现中华民族伟大复兴的目标。那建党...