then(onFulfilled, undefound) - then(undefine, onRejected) - catch()가 반환된 Promise를 이행하는 이유는 무엇입니까?
P粉446800329
P粉446800329 2024-03-30 23:21:22
0
2
554

이 코드를 사용하고 있습니다:

으아아아

갑자기 깨달았을 때:

약속with999履行 因此 catch() 方法未执行< /strong>,但是,catch() 返回的 Promise(在本例中为 returnCatch)最终fulfilled,其值与 相同>with999.

그럼 제 질문은, 왜 catch() 最终实现了 returnCatch약속할까요?

실행되지 않을 것으로 예상했지만 returnCatch挂起(因为 catch()then()을 사용해도 아무 일도 일어나지 않습니다. < /code>

"반대로 하는 것"에서도 같은 일이 발생합니다.

then() then()약속 거부 :

으아아아

무슨 일인지 설명해줄 사람이 있나요?

P粉446800329
P粉446800329

모든 응답(2)
P粉111627787

코드는 초기 Promise에 .then 및 .catch를 연결하는 것과 동일합니다. 이는 사실이 아니며, catch에 대한 새 변수를 생성하려면 이를 거부하고 다음 변수로 파이프해야 합니다.

여러 변수를 사용하지 않고 동일한 명령문을 한 번에 작성한다고 생각하면 동작이 더 의미가 있습니다. Promise가 확인되면 첫 번째 .then이 실행되고, Promise가 거부되면 첫 번째 .catch가 순서나 선언 또는 이를 수행하는 데 사용하는 변수 수에 관계없이 실행됩니다.

편집: 이 코드 조각은 위와 동일하며 동일한 Promise를 전달합니다.

으아악
P粉464082061

"왜"라는 질문은 항상 대답하기 어렵지만 기본적으로 다음과 같이 요약됩니다. 왜냐하면 그것이 효과가 있기 때문입니다.

아마도 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).

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿