2014-12-15 3 views
4

이 예제에서는 동기식 코드를 비동기 적으로 만들려고 시도하고 있습니다. 내가 발견 한 모든 예제는 아래의 docs.angularjs.org .. $ q에서 첫 번째 예를 제외하고는 반대의 작업을 수행했습니다.

doc은 사용하려고하는 $ q 생성자를 나열합니다. 안타깝게도 jsfiddle Angular libraries 1.1.1과 1.2.1은이 예제에서와 같이 $ q 객체 (함수가 아님)를 제공합니다. 대신, 나는 예제를 제공하고 누군가가 버그를 볼 수 있기를 바랍니다.

https://docs.angularjs.org/api/ng/service/ $ q를 내가 볼 필요가

"이 발생하지 않습니다!" 실행할 줄.

f = function(name) { 
    return $q(function(resolve, reject) { 
     console.log "this does not happen!" 
     resolve('great') 
    }); 
} 


f(name).then(function(result) { 
    console.log 'result', result 
}, function(error) { 
    console.log 'error', error 
}); 

로깅 대신 "이것은 발생하지 않습니다!" "위대한"다음에, 실제로 함수가 $ q 로그에 전달 된 것을 볼 수 있습니다 ::

result function(resolve, reject) { 
     console.log "this does not happen!" 
     resolve('great') 
    } 

내가 잘못 한 것을 누군가 볼 수 있습니까?

답변

4

아무런 잘못하지 않았습니다. 정말이 각 문서가 바로 그 위에 숨겨진이 줄을 그 코드 보여줄 것이 적절하다고 생각하지 않습니다 생성자 스타일의 사용이 지원되지만, ES6 하모니 약속에서 지원하는 모든 방법을

을하지 않습니다 사용할 수 있습니다.

여러분이 보시 듯이 혼동을줍니다.

dfd.reject('some value'); 
dfd.resolve('some value'); 
5

시도하려는 것을 정확히보기가 어렵지만 여기에 도움이되는 몇 가지 코드가 나와 있습니다.

f = function(someValue){ 
    var deferred = $q.defer(); 
    doSomethingAsync(someValue, function(result){ return deferred.resolve(result)}); 
    return deferred.promise; 
} 

f("foo").then(function() {alert("I was called after the async thing happened")}) 
+1

내가 다시 전화와 doSomethingAsync 방법을 갖는 사치가 없습니다 : (지퍼 게시 등)

var dfd = $q.defer(); 

를 생성자 방법을 사용하고 다음을 수행 할 수 있습니다 . 그것은 전형적인 $ q.defer() 메소드로는 수행 할 수없는 것처럼 보입니다. 한 가지 예는 브라우저에서 localstorage를 모방 한 파일 IO을 래핑하는 것입니다. nodejs 측은 실제 표준을 모방하기 위해 파일 동기면을 사용합니다. 그것은 동기식입니다. – jcalfee314