2016-08-22 2 views
2

약속을 지키려고합니다. 아래 getExternalMap() 약속을 반환합니다 (ajax 호출 처리 => deferred.resolve() 및 반환 된 deferred.promise). "First chaining"은 문제없이 호출되지만 "Second chaining"은 호출되지 않습니다. 그 이유는 무엇입니까?Q 연결이 잘못되었습니다.

나는 그것이 잘 쓰여졌을 것이라고 생각했지만 그렇지 않았고 나는 아직 그 이유를 찾을 수 없다. 내가 제대로 이해 해요 경우

var self = this; 
getExternalMap().then(function() { 
     console.log("First chaining"); 
     var parsedMap = self.destinationsApiParser.getSortDestinations(); 
     return self.initProxies(parsedMap); 
    }).then(function() { 
     console.log('second chaining'); 
    }); 

this.initProxies = function(parsedMap) { 
    var deferred = Q.defer(); 
    var destinationsApiProxy = new DestinationsApiProxy(this.app, parsedMap); 
    deferred.resolve(); 
    return deferred.promise; 
} 
+4

오류를보기 위해 체인 끝 부분에'catch()'또는'done()'을 추가하십시오. – Sirko

+2

'initProxies'는 약속을 반환해서는 안됩니다. 비동기 적이 아닙니다. – Bergi

+0

님이 sirko에게 문제를 발견했습니다. initProxies가 똥을 다르고 조용히 추락했습니다. 또한 Bergi의 발언도 좋습니다. 두 분께 감사합니다. –

답변

0

, 당신은 대신이 작업을 수행 할 수 :

var self = this; 
getExternalMap() 
    .then(() => console.log("1st chaining")) 
    .then(self.destinationsAPIParser.getSortDestinations) 
    .then(self.initProxies) 
    .then(() => console.log("2nd chaining")) 

this.initProxies = function(parsedMap) { 
    var deferred = Q.defer(); 
    var destinationsApiProxy = new DestinationsApiProxy(this.app, parsedMap); 
    deferred.resolve(); 
    return deferred.promise; 
} 

self.destinationsAPIParser.getSortDestinations이 약속을 반환한다고 가정.