>  Q&A  >  본문

then(onFulfilled, undefound) - then(undefine, onRejected) - catch()가 반환된 Promise를 이행하는 이유는 무엇입니까?

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

으아아아

갑자기 깨달았을 때:

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

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

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

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

then() then()약속 거부 :

으아아아

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

P粉446800329P粉446800329187일 전365

모든 응답(2)나는 대답할 것이다

  • P粉111627787

    P粉1116277872024-03-31 11:54:44

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

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

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

    으아악

    회신하다
    0
  • P粉464082061

    P粉4640820612024-03-31 10:54:30

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

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

    회신하다
    0
  • 취소회신하다