Javascript 连锁承诺赢得';我没发现错误

Javascript 连锁承诺赢得';我没发现错误,javascript,promise,Javascript,Promise,我正在努力使承诺生效,到目前为止,我无意中发现了这一点: new Promise((resolve, reject) => { setTimeout(() => { return resolve() }, 400) }).then(new Promise((resolve, reject) => { setTimeout(() => { return reject('some error') }, 100)

我正在努力使承诺生效,到目前为止,我无意中发现了这一点:

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)
})
我的理解是,这个示例应该显示
错误:一些错误
,第一个承诺成功解决,第二个承诺抛出错误。但是当我运行这个(在节点9.7中,如果这很重要的话)时,我得到了以下错误:

(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

我的
.catch()
似乎不起作用,有问题吗?

您实际上是在传递承诺,而不是函数

您应该这样编写代码:

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)
})

你实际上是在传递承诺,而不是功能

您应该这样编写代码:

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)
})

如果有帮助,请检查答案并做标记,我已经测试过了,它的工作原理请检查答案并做标记,如果有帮助,我已经测试过了,它的工作原理可能值得注意的是,
返回值在这两种情况下都是不必要的和令人困惑的。。。i、 e.可以只做
setTimeout(()=>{resolve()},400)
setTimeout(()=>{reject(new Error('some Error'))})
因为没有任何东西在检查返回的值。这也是我想知道的事情,你能详细说明什么时候返回,什么时候不返回吗?我会详细说明。你能问一个单独的问题吗?可能值得注意的是,这两种情况下的
返回值都是不必要的,而且令人困惑的。。。i、 e.可以只做
setTimeout(()=>{resolve()},400)
setTimeout(()=>{reject(new Error('some Error'))})
因为没有任何东西在检查返回的值。这也是我想知道的事情,你能详细说明什么时候返回,什么时候不返回吗?我会详细说明。你能问一个单独的问题吗?