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
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 的错误信息
原文:https://www.cnblogs.com/rosendolu/p/11831807.html