Javascript 为什么Promise.all()会抛出异常,即使我.catch()也会抛出异常?
运行代码Javascript 为什么Promise.all()会抛出异常,即使我.catch()也会抛出异常?,javascript,es6-promise,unhandled-promise-rejection,Javascript,Es6 Promise,Unhandled Promise Rejection,运行代码 Promise.all(new Promise((res, rej) => rej('Failure!'))) .catch(() => console.log("It's all okay.")) 在节点v12.19.0中,日志一切正常。发送到控制台,但仍然抛出异常。为什么呢?我本以为会有和我跑步时一样的行为 new Promise((res, rej) => rej('Failure!')) .catch(() => console.l
Promise.all(new Promise((res, rej) => rej('Failure!')))
.catch(() => console.log("It's all okay."))
在节点v12.19.0中,日志一切正常。
发送到控制台,但仍然抛出异常。为什么呢?我本以为会有和我跑步时一样的行为
new Promise((res, rej) => rej('Failure!'))
.catch(() => console.log("It's all okay."))
这也会记录一切正常。
到控制台,但不会引发异常
我怎样才能抓住承诺中的拒绝呢
完整控制台输出:
> Promise.all(new Promise((res, rej) => rej('Failure!'))).catch(() => console.log("It's all okay."))
Promise { <pending> }
> It's all okay.
(node:2872) UnhandledPromiseRejectionWarning: Failure!
(node:2872) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 4)
> new Promise((res, rej) => rej('Failure!')).catch(() => console.log("It's all okay."))
Promise { <pending> }
> It's all okay.
>Promise.all(新的Promise((res,rej)=>rej('Failure!')).catch(()=>console.log(“一切正常”)
承诺{}
>没关系。
(节点:2872)未处理的PromisejectionWarning:失败!
(节点:2872)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志“---unhandled rejections=strict”(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (拒绝id:4)
>新承诺((res,rej)=>rej('Failure!').catch(()=>console.log(“一切正常”))
承诺{}
>没关系。
正如在评论中指出的
如果在没有catch语句的情况下执行第一位代码(或者实际打印捕获的错误),您将看到发生了什么
Promise.all(新承诺((res,rej)=>rej('Failure!'))
返回:
Promise {<fulfilled>}
It´s all okay.
Promise{:TypeError}
无缘无故的失败!
未捕获(承诺中)TypeError:对象不可iterable(无法读取属性符号(Symbol.iterator))
在Function.all(注释中)
Promise.all([新承诺((res,rej)=>rej('Failure!')))
.catch(()=>console.log(“一切正常”)
返回:
Promise {<fulfilled>}
It´s all okay.
Promise{}
一切都好。
因此,我们成功地捕获了被拒绝的承诺错误
同样值得注意的是,返回的最终承诺是catch()
方法在执行后返回的承诺。这是因为我们成功执行了catch语句,尽管promise.all()
实际返回的承诺被拒绝。promise.all()的参数
应该是一系列承诺,而不是一个承诺。承诺。所有(这里是承诺的数组)
谢谢。我认为承诺。所有(承诺1,承诺2,…)
都应该起作用是错误的。但是为什么它会在拒绝时触发捕获,即使它不是一个数组?也许可以使用捕获((错误)=>控制台.log(错误))
而不是说“一切都好。”:-p未经处理的拒绝来自新承诺((res,rej)=>rej('Failure!'))
它没有在任何地方处理,而不是来自承诺.all()
(您确实处理过)。