简体   繁体   中英

Chained promises won't catch an error

I'm trying to make promises work, and so far i've stumbled on this:

new Promise((resolve, reject) => {
    setTimeout(() => {
        return resolve()
    }, 400)
}).then(new Promise((resolve, reject) => {
    setTimeout(() => {
        return reject('some error')
    }, 100)
})).then(() => {
    console.log('All promises resolved')
}).catch((err) => {
    console.log('Error: ' + err)
})

My understanding is that this example should display Error: some error , with the first promise successfully resolving, and the second one throwing an error. But when i run this (in node 9.7, if that matters) i get this error:

(node:10102) UnhandledPromiseRejectionWarning: some error
(node:10102) 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:10102) [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.
All promises resolved

My .catch() doesn't seem to be working, is there a problem with it ?

You are actually passing promise, instead of function.

You should write your code like this:

new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve()
    }, 400)
}).then(() => new Promise((resolve, reject) => {
    setTimeout(() => {
        reject(new Error('some error'))
    }, 100)
})).then(() => {
    console.log('All promises resolved')
}).catch((err) => {
    console.log('Error: ' + err)
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM