2014-07-11 2 views
1

간단한 약속 비동기 구조를 설정하여 http 요청에서 json이 반환 한 객체를 반환하려고했지만 찾을 수 없습니다. 하나의 좋은 예. 나는 끔찍한 잘못을 저지르고 있다고 확신하지만, 나는 그 머리를 감쌀 수 없다. 나는이 메서드를 호출 할 때

getjsonObjAsync(): any { 
    var deferred: ng.IDeferred<any> = this.$q.defer(); 
    $.ajax({ 
     url: AppSettings.jsonObjUrl, 
     type: 'get', 
    }) 
    .then((result) => { 
     deferred.resolve(result); 
    }) 
    return deferred.promise; 
} 

, 그것은

Object {then: function, catch: function, finally: function} 
catch: function (callback) { 
finally: function (callback) { 
then: function (callback, errback, progressback) { 
__proto__: Object 

를 반환하지만 그것은 내가 HTTP 요청에서 얻을 JSON 개체를 반환 할 것을 : 여기

내가 노력하고 무엇인가 console.log (결과)를 여기에 추가하면 볼 수 있습니다.

}) 
    .then((result) => { 
     console.log(result) 
     deferred.resolve(result); 
    }) 

나는 $ q 시스템을 잘못 사용하고있는 것처럼 보입니다. 하지만 json 객체를 반환하는 올바른 방법을 알 수는 없습니다.

나는 여기에 예를 따르려고 노력 : https://stackoverflow.com/a/23572025/3757782 을하지만 여전히 reqest

감사에서 JSON 개체를 반환하지!

답변

2

당신이 반환되어 있기 때문에 promise 즉 당신이 다른 쪽 끝 즉의 약속을 사용할 필요가 return deferred.promise :

getjsonObjAsync().then((result)=>{ 
    console.log(result); 
}); 

PS : $http (및 $http.get) $.ajax 이상을 선호합니다.

2

약속의 작동 방식을 잘못 이해 한 것 같습니다. JSON을 사용자의 메서드에서 반환하지 않도록 차단하지 않는 한 비동기 작업을 마술처럼 동기식 작업으로 변환하지 않습니다.

코드로 돌아 오는 객체의 속성 인 then은 약속의 처리기를 등록하는 함수이며 $.ajax 호출 결과와 똑같이 사용됩니다.

+0

답장을 보내 주셔서 감사합니다. 이것은 확실히 문제를 해결하는 데 도움이되었지만 이해가 부족한 실제 문제는 해결했습니다.하지만 basarat의 대답은보다 직접적인 대답 인 것 같습니다. – Xgongiveittoya

관련 문제