Promise学习笔记

114 阅读1分钟

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. (1)then() 默认会转化为一个promise对象 如果没有return new Promise 或者 return "xxx" ,则按 Promise.resolve()空处理。

    (2)then() 括号里面的方法 可以不返回内容 ,但是会导致下一个then 拿不到数据

  2. (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);
})
  1. 第一种无论中间有多个then 都能 全局捕捉,找到第一个后,后面的异常就不再捕捉了
  2. 第二种只能获取当前的then(),前面的then()都不能在捕捉。
  3. 两者只能写其中一种方法