1.Promise.resolve() 和 Promise.reject()
Promise.resolve("xxx")
//等价于
new Promise( (resolve,reject) => {
resolve("xxx");
})
Promise.reject("xxx")
//等价于
new Promise( (resolve,reject) => {
reject("xxx");
})
都是立即执行的
2.promise.then 的学习
疑问:
- 多个then() 空参数调用 与 有参数区别?
- 多个空参数可以 一直保留上一次的状态和回调,
- pormise then(block1).then(block2).catch(). 最后一个catch 是如何捕捉第一个then(block1)的异常?
//连续then()的使用
let resolveP = Promise.resolve("成功1")
resolveP.then().then().then( (res) => {
console.log("执行结果",res);//执行结果 成功1
})
//连续then()中间有reject的使用
let resolveP = Promise.resolve("成功1")
let rejectP = new Promise((resolve,reject)=>{
setTimeout(function(){
reject('失败参数')
},1000)
})
resolveP.then().then( (res) => rejectP).then( (res) => {
console.log("执行结果",res);
}).catch( (error) => {
console.log("执行错误结果",error);
})
链式调用then() 总结
-
(1)then() 默认会转化为一个promise对象 如果没有return new Promise 或者 return "xxx" ,则按 Promise.resolve()空处理。
(2)then() 括号里面的方法 可以不返回内容 ,但是会导致下一个then 拿不到数据
-
(1)只有在 then().then().then() 参数为空时候才保留第一次promise 返回的信息
(2)如果中间有then( res => “xxxx”) 带参数后 ,相当于 返回了 Promise.resolve(“xxxx”),所以前面的会被覆盖
3.Promise中catch和reject的区别
//第一种
promise.then((res) => {
console.log('then:', res);
}).catch((err) => {
console.log('catch:', err);
})
//第二种
promise.then((res) => {
console.log('then:', res);
}, (err) => {
console.log('catch:', err);
})
- 第一种无论中间有多个then 都能 全局捕捉,找到第一个后,后面的异常就不再捕捉了
- 第二种只能获取当前的then(),前面的then()都不能在捕捉。
- 两者只能写其中一种方法