转圈圈

promise 小记

promise创建后立即执行

const p1 = new Promise((resolve,reject) => {
  setTimeout(() => {
      reject(`failed`)
  }, 3000);
})

const p2 = new Promise((resolve,reject) => {
  setTimeout(() => {
      resolve(p1)
  }, 1000);
})
console.time('timer')
p2.then(result => {
  console.log(result)
}).catch(err => {
  console.log(err);
  console.timeEnd('timer')
})
// failed
//timer: 3006.597ms
// promise 创建后立即执行
// p2 的状态由p1 决定,1s p2 变为resolved ,又过了 2s 后 p1 变为 rejected 触发catch

const p1 =() =>   new Promise((resolve,reject) => {
  setTimeout(() => {
      reject(`failed`)
  }, 3000);
})

const p2 = () =>  new Promise((resolve,reject) => {
  setTimeout(() => {
      resolve(p1())
  }, 1000);
})
console.time('timer')
p2().then(result => {
  console.log(result)
}).catch(err => {
  console.log(err);
  console.timeEnd('timer')
})

// failed
// timer: 4025.817ms
// p2 的状态由p1 决定,1s p2 变为resolved ,又过了 3s 后 p1 变为 rejected 触发catch

promise.then(() => {},err => {}) err回调跟catch 区别

const p2 =  new Promise((resolve,reject) => {
  setTimeout(() => {
      resolve(111)
  }, 1000);
})


p2.then(result => {
  console.log(result)
  console.log(efdsafa);
  
}).catch(err => {
  console.log(err);
  console.timeEnd('timer')
})
// catch 可以捕获2个promise 中的错误信息(p2 和then)
// NOTE: nodejs会有错误提示
// 111
// (node:22356) UnhandledPromiseRejectionWarning: failed
// (node:22356) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This // error originated either by throwing inside of an async function without
// a catch block, or by rejecting a promise which was not handled with .catch(). // (rejection id: 1)
// (node:22356) [DEP0018] DeprecationWarning: Unhandled promise rejections are // deprecated. In the future, promise rejections that are not handled will terminate // the Node.js process with a non-zero exit code.

// NOTE: browser
// Promise {<pending>}
// 111
p2.then(result => {
  console.log(result)
  console.log(dfafsd);

},err => {
    console.log(err);
    console.timeEnd('timer')
})
// 111
// Uncaught (in promise) ReferenceError: dfafsd is not defined
// 无法捕获到第二个promise 的错误信息
posted @ 2019-11-10 20:59  rosendolu  阅读(143)  评论(0编辑  收藏  举报