2014-11-04 4 views
0

약속과 약속을 다른 방법으로 포장하여 시작과 끝을 추적 할 수 있습니까? 나는 몇 가지 솔루션을했지만, 내 CONSOLE.LOG이 실행되지 않습니다 : 약속을 포장하는 방법

var realPromise = myService.doItAsync(); 

var defer = $q.defer(); 
realPromise.then(function(result) { 
    console.log("end at " + new Date().getTime()); // <====== never executed 
    defer.resolve(result); 
}, function(reason){ 
    console.log("end at " + new Date().getTime()); // <====== never executed 
    defer.reject(reason); 
}); 
return defer.promise; 

이 완료 예를 들어 그 jsfiddle 참조 : jsfiddle

+0

당신은 관련 및 간단한 코드에 jsfiddle을 줄일 수 있습니다 ...이 될 수 있습니다 (즉, 어떤 간접 또는 테스트 platfrom없이)? –

+0

'realPromise'와 같은 소리는 해결되지 않거나 거부됩니다. – TheSharpieOne

+0

promise의'then' 메소드 외부에서'defer.resolve' (또는'reject')를 호출해야합니다. –

답변

2

가 그렇게 약속 해결 $timeout.flush()를 호출 할 필요가 당신의 바이올린에 같은데를 ..

scope.useService(); 
timeout.flush(); // get timeout from the injector in beforeEach() 
rootScope.$digest(); 

또한 기존 약속을 연결하고 다시 사용하면 코드를 간단하게 만들 수 있습니다. 예를 들어, 위의 예는

console.log("begin at " + new Date().getTime()); 
var realPromise = fn.apply(this, arguments); 
realPromise.finally(function(result) { 
    console.log("end at " + new Date().getTime()); 
}); 
return realPromise; 

Updated Fiddle

+0

Thx 많이 ... 그것의 작품! – asicfr

관련 문제