Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Promise.all()会抛出异常,即使我.catch()也会抛出异常?_Javascript_Es6 Promise_Unhandled Promise Rejection - Fatal编程技术网

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()
(您确实处理过)。