目录
什么是Promise
Promise对象用于表示一个异步操作的最终状态(完成或失败)以及其返回值 ——MDN
使用Promise
Promise的三种状态
Promise状态的改变不可逆 一但决议就不能修改
进行中 —— 成功
pending —— fulfilled
进行中 —— 失败
pending —— rejected
then
成功时执行 resolve
function f() {
return new Promise(resolve => {
setTimeout(function(){
resolve();
},1000)
})
}
f()
.then(function(){
console.log(1);
return f();
})
.then(function(){
console.log(2);
})
输出结果:1s 之后输出 1,再1s之后输出 2
then方法与回调函数相比层级更清晰
什么叫回调函数?在知乎上看到一个回答觉得很形象这里引用下:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。
作者:常溪玲 链接:https://www.zhihu.com/question/19801131/answer/13005983
来源:知乎
Promise的信任问题 Promise改善了信任上的一些问题 如:
resolve();
resolve();
只会被执行一次
作为初学者其实不大懂的什么叫信任问题,这里老师说了,就做个笔记记录下,有机会再完善
信任问题可参考
https://blog.csdn.net/qq_40653782/article/details/103375370
Promise 处理错误
失败时执行reject
function f(val) {
return new Promise((resolve,reject) => {
if(val) {
resolve({name: '小明'});//只能传递一个参数
}else {
reject(404);
}
})
}
f(false)
.then(data => {
console.log(data);
},e => {
console.log(e);
})
catch()
使用catch 方法可以捕获错误
function f(val) {
return new Promise((resolve,reject) => {
if(val) {
resolve({name: '小明'});//只能传递一个参数
}else {
reject(404);
}
})
}
f(true)
.then(data => {
console.log(data);
return f(false)
})
.catch(e => {
console.log(e)
})
finally()
finally 是每个Promise实例都拥有的
不论成功还是失败,finally 中的内容一定会执行
f(true)
.then(data => {
console.log(data);
return f(false)
})
.catch(e => {
console.log(e)
})
.finally(() => {
console.log('我一定会被输出')})
Promise.all() 与 Promise.race()
Promise.all() 方法
Promise.all 方法可以把多个promise实例 包装成一个新的promise实例
Promise.all([promise1,promise2]):Promise
如果参数中的Promise对象均决议为成功
则Promise.all()决议为成功,并将值返回一个数组参数中
如参数中的Promise对象有一个决议为失败,
则Promise.all()决议为失败,并返回失败的值为参数
如果Promise.all([])决议的是空数组,则立即返回成功
Promise.race()方法
Promise.race([[promise1,promise2]):Promise
race意思是竞赛
只要其中一个promise实例决议为成功或者失败,就返回
成功或失败
返回最先决议的promise 实例结果
如果Promise.race([])决议的是空数组,则一直挂着
Promise.resolve() 与 Promise.rejcet()
Promise.resolve() 与 Promise.rejcet()常用来生成已经被决议为失败或者成功的promise实例
Promise.resolve()
resolve() 传值:
1、传递一个普通的值
如果接受的是普通的值,就会立即决议为成功,并填充这个值
let p1 = new Promise(resolve = >{
resolve('成功')
})
//p1 等价于 p2
let p2 = Promise.resolve('成功')
2、传递一个promise实例
如果接受的是一个promise实例,则返回这个promise实例
let p1 = new Promise(resolve = >{
resolve('成功')
})
let p2 = Promise.resolve(p1)
p2.then(data => void console.log(data))
//p2 === p1
3、传递一个thenable
如果接受的是thenable 对象,则会把他包装成Promise对象,并立即执行该对象的then方法
Promise.rejcet()
决议为失败时reject 会产生一个决议失败的promise 并直接传递值
resolve() 与reject()方法
1、如果接受的是普通的值,就会立即决议为成功,并填充这个值
2、如果接受的是一个promise实例,则返回这个promise神似李
3、如果接受的是thenable 对象,则会把他包装成Promise对象,并立即执行该对象的then方法
4、reject 会产生一个决议失败的promise 并直接传递值
个人学习笔记