首页 > 其他 > 详细

promise 小记

时间:2019-11-10 21:54:45      阅读:79      评论:0      收藏:0      [点我收藏+]

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 的错误信息

promise 小记

原文:https://www.cnblogs.com/rosendolu/p/11831807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!