2014-02-06 4 views
2

약속에 관한 블로그 게시물을 읽었는데이 코드가 어떻게 작동하는지 잘 모르겠습니다.자바 스크립트에서 두 개의 리턴은 무엇을 의미합니까?

function getPost(id) { 
    return $.getJSON('/posts/'+ id).then(function(data, status, xhr) { 
     return data; 
    }); 
} 

나는 항상 나에게 $.getJSON의 기본이지만 두 번째 return data; 무엇을 의미 하는가 약속을 반환이 함수를 시도?

감사

답변

5

두 번째 return.then() 메서드에 대해 정의 된 익명 콜백 메서드에 속합니다.

일반적으로
function jsonCallback(data, status, xhr) { 
    return data; 
} 

function getPost(id) { 
    return $.getJSON('/posts/'+ id).then(jsonCallback);  
} 

, 뭔가 : 당신은 모두 익명 함수를 닉스 경우, 그것은 다음과 같이 보일 것이다

function getPost(id) { 
    return $.getJSON('/posts/'+ id).then(
     function(data, status, xhr) { 
      return data; 
     } 
    ); 
} 

: 적은 표준화 뭔가 서식을 변경하면 시각화 쉬울 것이다 이 질문은 귀하의 질문에있는 그대로 설정되지만, 그것들을 분리하면 초보자를 쉽게 볼 수 있습니다.

기본적으로 .then() 메서드는 다른 함수 (위의 익명 메서드/jsonCallback)를 매개 변수로 사용한다고 가정 할 수 있습니다. 그 내에서, 아마이 (또는 적어도 호출)과 같은 형태 몇 가지 코드 :

function then(callback) { 
    if(callback && typeof(callback) === typeof(Function) { 
     callback(data, status, xhr); // data, status, and xhr are probably defined eslewhere in the object 
    } 
} 

확실히 jQuery의 deferred.then() 방법의 지나치게 단순한 예입니다,하지만 당신은 아이디어를 얻을.다음 방법은 경우에 말하는 것을 호출 할 때 당신이 $.getJSON('/posts/' + id) 보면 그래서 당신은 객체가 반환 된 것을 발견 할 것이다

+1

왜 downvote? 나는 내 대답을 향상시키는 것보다 행복 할 것이다. – valverij

0

getPost 방법은 getJSON의 반환 된 결과를 반환하고 then에 전달 폐쇄는 data를 반환합니다.

0

return 문 범위를 자세히 살펴보십시오. 함수의 해당 데이터를 모두 반환하는 익명 함수에서 콜백 데이터를 반환합니다.

2

return data; 문은 then 메서드에 전달 된 함수 리터럴의 일부입니다. 즉시 실행되지 않습니다.

  1. getPost가 약속 된 목적 및 방법 $.getJSONthen 사슬의 결과를 반환

    여기서 타임 라인이다.

  2. $.getJSON에 의해 시작된 AJAX 호출이 완료되면 then에 전달 된 함수가 호출됩니다. 이 함수를 콜백이라고합니다.
  3. 마지막으로 return data;이 실제로 실행될 때 콜백 함수가 실행됩니다.
0

function (a,b,c){i.done(a).fail(b).progress(c);return this} 

그래서 다음 코드를 거기에 그 함수 내에서 다음라는 방법입니다있다 이 getJSON 메서드에 대한 호출이 성공하면이 함수를 계속 실행합니다. 그 다음 방법의 부분은 i.done(a)입니다. 예 수에 대한 그래서하면 해당 브라우저의 성공에 경고 것입니다 실행하고

$.getJSON('/apicall').then(function() {alert ("Success");}).done(function() {alert("DONE");}) 

를 실행한다면 그냥 같은 때

$.getJSON('/apicall').then(function() {alert ("Success");}) 

를 실행 말하는 그런 성공 후 경고로 인해 완료를 얻을 경고를받을 것 API 호출이 완료됩니다. 당신이 $.getJSON 호출에 보면 또한 당신은 당신이 당신은 내가 무슨 뜻인지 볼 수있을 것

$.get('/asdf').then(function() { alert("Success");}).done(function() { alert("Done");}) 

콘솔에서 지금 실행 한 경우 다음을

function (a,b,c){return f.get(a,b,c,"json")} 

그래서 방법에 있음을 발견 할 것이다 . 지금까지 리턴 데이터 명령문이 검색된 데이터 json 데이터를 리턴합니다. 그러나 그것은 이상한 곳 어디에서도 반환하지 않습니다. 따라서 getPost으로 전화를 걸면 그 시점에서 아무 것도 반환하지 않습니다.

관련 문제