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和rejectedPromise
值,其中的值可能恰好相同。