2017-11-23 16 views
-1

비동기 기능 내에서 약속 기능이 해결되거나 거부되지 않으면 어떻게됩니까? 아래의 저장 방법은 초기 조건이 만족스럽지 않으면 오류가 발생하지 않으며 영원히 기다릴 것입니다. 응답받을 때까지?동기화 기능 내에서 약속 약속이 해결되지 않음

save().then(results=>{ 

}) 

save():promise<any>{ 
    if (conditionA) { 
    return http request 
    } 
    if (conditonB) { 
    return http request} 
    } 
} 
+1

이것은 결코 해결되지 않는 약속이 있다는 것을 의미하지 않으며, 함수가 약속을 전혀 만들지 않으며'.then()'가'undefined'에서 호출 될 때 예외를 throw한다는 것을 의미합니다. 그러지 마. – Bergi

+0

예 현재이 문제와 관련된 버그 수정을하고 있습니다. 그리고 정의되지 않은 코드를 호출 할 수 없다는 것을 보여줍니다. 이유는 이것이 문제인지 확인하고 싶습니다. – Heshan

답변

1

약속이 때때로 약속을 반환하면 항상 약속을 반환해야합니다. 일부 코드 경로로 돌아갈 약속을하지 않아도된다면 일반적인 디자인 패턴은 return Promise.resolve() 일뿐입니다.

save().then(results=>{ 

}) 

save():promise<any>{ 
    if (conditionA) { 
    return request(...); 
    } else if (conditonB) { 
    return request(...); 
    } else { 
    return Promise.resolve(...); 
    } 
} 

당신은 당신의 기능에 대한 이해가 위의 ... 부품을 작성 : 그래서, 당신의 의사 코드로 계속, 당신은 이런 식으로 뭔가를 할 것입니다. 그러나 때때로 약속을 되 돌리면 항상 약속을 되풀이합니다. 그런 다음 호출자는 반환 된 약속을 일관성있게 사용할 수 있습니다. 작업이 이미 완료되었거나 수행 할 작업이 없다면 이미 해결 된 약속 만 반환하고 호출자는 항상 약속으로 사용할 수있는 일관된 반환 값을 얻습니다.


참고이의 그 누구도 당신의 질문의 제목과 일치하지 않습니다, 그러나 그것은 완전히 당신의 질문의 몸에 맞는 않습니다. 제목이 잘못 되었습니까? 아니면 누락 된 질문 설명의 일부입니까?

+0

감사합니다. @ jfriend00 의견에 언급되어 있습니다. 우리의 기존 코드에 몇 가지 버그를 고쳐서 "그 다음에 정의되지 않은 오류가 발생했습니다"라고 말했습니다. 그 밖의 것이 없기 때문에 약속이 해결되지 않으므로 오류가 발생합니다. 그러나 답장으로 나는 그것이 만들어졌고 해결할 수없는 경우 – Heshan

+0

@Heshan - 나중에 따라 오는 사람들은 혼란스럽지 않습니다. 질문에 "편집"링크를 사용하고 질문의 제목을 수정하여 여기에있는 상황에 더 잘 맞도록 제안하십시오. . – jfriend00

+0

예, 감사합니다. – Heshan