Javascript 为什么.catch()在异步函数的循环中的承诺构造函数中不捕获拒绝(),除非传递了错误?

Javascript 为什么.catch()在异步函数的循环中的承诺构造函数中不捕获拒绝(),除非传递了错误?,javascript,promise,async-await,ecmascript-2017,Javascript,Promise,Async Await,Ecmascript 2017,给定 (异步()=>{ const p=等待新承诺((解析、拒绝)=>setTimeout(()=>{ 拒绝(新错误(1)) },Math.floor(Math.random()*1000));返回p})() .then(数据=>console.log(数据)) .catch(err=>console.error(err)) 如果我们[…]没有显式地将Promise构造函数解析程序函数的的Error()传递给reject()。catch()不会捕获错误 当然,因为那时没有错误。但是catch将

给定

(异步()=>{
const p=等待新承诺((解析、拒绝)=>setTimeout(()=>{
拒绝(新错误(1))
},Math.floor(Math.random()*1000));返回p})()
.then(数据=>console.log(数据))
.catch(err=>console.error(err))
如果我们[…]没有显式地将Promise构造函数解析程序函数的
Error()
传递给
reject()
。catch()
不会捕获错误


当然,因为那时没有错误。但是
catch
将捕获您传递给
reject
的任何内容,这是正确记录的值
1

在尝试代码时,例如在使用
Promise
的情况下,预计会在
处记录错误。catch()
,显式传递
error()
,最好将相关消息作为参数,发送到
Promise
构造函数的
reject()
,或
Promise.reject()
;并使用
console.error()
替换
console.log()
.catch()
中的
console.log()
,以区分预期记录为
error()
而非已解决的
Promise
值的错误,解析值和拒绝值可能恰好相同。

fn
在第一次迭代中抛出
wait prop()。。。因此,为什么最后一个catch会输出
1
(调用的是最后一个catch,而不是最后一个)@JaromandaX使用
console.error()
而不是
console.log()
at
.catch()
。你能把你的评论作为回答吗?问题是用户在阅读回复时出错。为了防止将来出现用户错误:1)在预期的时间和错误时显式传递
error()
,2)使用
console.error()
而不是
console.log()
.catch()
处区分resolve和rejected
Promise
值,其中的值可能恰好相同。