- 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: Node.JS 会有错误提示
- // 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 的错误信息
来源: http://www.bubuko.com/infodetail-3282047.html