이 코드를 사용하고 있습니다:
으아아아
갑자기 깨달았을 때:
약속with999
已履行 因此 catch()
方法未执行< /strong>,但是,catch()
返回的 Promise(在本例中为 returnCatch
)最终fulfilled,其值与 相同>with999
.
그럼 제 질문은, 왜 catch()
最终实现了 returnCatch
약속할까요?
실행되지 않을 것으로 예상했지만 returnCatch
会挂起(因为 catch()
then()을 사용해도 아무 일도 일어나지 않습니다. < /code>
then() then()
약속 거부 :
무슨 일인지 설명해줄 사람이 있나요?
코드는 초기 Promise에 .then 및 .catch를 연결하는 것과 동일합니다. 이는 사실이 아니며, catch에 대한 새 변수를 생성하려면 이를 거부하고 다음 변수로 파이프해야 합니다.
여러 변수를 사용하지 않고 동일한 명령문을 한 번에 작성한다고 생각하면 동작이 더 의미가 있습니다. Promise가 확인되면 첫 번째 .then이 실행되고, Promise가 거부되면 첫 번째 .catch가 순서나 선언 또는 이를 수행하는 데 사용하는 변수 수에 관계없이 실행됩니다.
편집: 이 코드 조각은 위와 동일하며 동일한 Promise를 전달합니다.
"왜"라는 질문은 항상 대답하기 어렵지만 기본적으로 다음과 같이 요약됩니다. 왜냐하면 그것이 효과가 있기 때문입니다.
아마도
catch()
传递履行结果的行为来看,这一点并不是很明显,但请看一下.then()
传递的第二个示例关于拒绝:我们希望执行.catch()
回调,以处理承诺链中早期出现的任何错误。我们不希望 Promise 链在中间停止(Promise 保持挂起状态),因为出现错误并且.then()
의 콜백이 실행되지 않았을 것입니다.이 동작은 실제로 두 개의 매개변수(이행을 처리하는 매개변수와 거부를 처리하는 매개변수)가 있는
.then(handleResult)
和.catch(handleError)
之间是对称的。但请注意,这些实际上只是.then(handleResult, null)
和.then(null, handleError)
的简化语法。then
메소드 에 있다는 것을 깨달았습니다. 두 시험을 동시에 통과할 수 있습니다(보통은 그래야 합니다)..then()
返回的 Promise 会根据相应处理程序的结果进行解析(如果调用抛出异常则被拒绝),Promise 链背后的想法是它总是在最初的承诺得到解决后才得到解决。如果未提供相应的回调,则默认情况下仅传递结果 - 无论是.then(null, null)
、.then(null, handleError)
均已满足Promise 或被拒绝的 Promise 上的.then(handleResult, null)
.