2013-05-24 4 views
17

뭔가를 할 수도 있고하지 않을 수도있는 일련의 약속이 있습니다. 예 :빈 약속 만들기

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return Q.fcall(function(){/*do nothing here*/}); 
    }).then(sleep) 

어디 getYear, partysleep 모든 반환 약속. else 문을 작성하는보다 간결한 방법이 있습니까? 즉, 아무 것도하지 않고 여전히 체인 가능한 약속을 반환합니까?

+0

'return party' 또는'return party()'입니까? –

+0

Thanks @ Beetroot-Beetroot. 감사합니다. 결정된. – prauchfuss

+0

나는 파티가 약속을 되 돌린 함수 라기보다는 단지 약속의 가치라고 가정했다. 나는이 코드가 예제를 설명하기위한 코드 일 뿐이므로 문제가되지 않는다고 생각했다. 저는 이제 당신이 파티를 열어주는 프로그램을 진정으로 창조하고 있다고 가정해야합니다. 그러나 1999 년에 한해서만 말입니다. – ForbesLindesay

답변

26

예. Q(value)value에 대한 약속을 반환합니다 (value이 약속 인 경우 값을 언랩합니다).

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return Q(undefined); 
    }).then(sleep) 

또는, 당신은 반환하지 아무것도에 의해 동일한 의미를 얻을 수 있습니다 :

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    }).then(sleep) 

당신이 해결 결코 약속을했다 원한 경우에, 당신의 최선의 방법이 될 것이다

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return Q.promise(function() {}); 
    }).then(sleep) 

당신이 할 수있는 일은 동일한 약속을 다시 사용하는 것입니다 :

var stop = Q.promise(function() {}); 
    getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return stop 
    }).then(sleep) 
+0

"결코 해결되지 않은 약속"이란 무엇을 의미합니까? 가치 (예 :'결과')를 반환하는 약속을하는 것 이상의 이점이 있습니까? –

+0

@Patrick Promises는 Pending, Fulfilled & Rejected의 세 가지 상태 중 하나가 될 수 있습니다. 약속은 영원히 "보류"상태로 유지 될 수 있습니다. 이것은 내가 결코 "해결되지 않는 약속"을 의미합니다. 나는 일반적으로 안티 패턴이라고 말하지만, 주어진 함수가 발생한 이후의 모든 로직을 막으려는 경우 유용 할 수 있습니다. 사실상 모든 성공 핸들러와 모든 실패 핸들러를 체인 아래로 건너 뛸 수 있습니다. 아마 최선의 피할 수 있습니다. – ForbesLindesay

+0

그래, 그건 나쁜 생각 같아. 약속이 결코 성취되지 못하게하는 모범은 무엇입니까? 마지막'.then (sleep)'은 절대 할당되지 않은 약속을 반환하기 때문에? (따라서 .'' 또는'.done''ed 될 수 없습니까?) –