2016-10-10 2 views
0

그래서 저는이 자바 스크립트를 처음 사용하고 JSON을 사용합니다. 나는이 경우 코멘트가 필요하고 현재 사용자 이름이 필요한 웹 페이지를 개발 중이다.중첩 된 getJSON 호출

이 문제를 해결하기 위해 getJSON() 메서드를 사용하여 사용자 이름을 반환하는 함수를 만들려고했지만 분명히 작동하지 않습니다. 대신에 중첩 된 getJSON 호출을 사용하고있었습니다. 이 같은

뭔가 :

$.getJSON(getCommentsURL, function(jsonComments){ 
    $.getJSON(getUsernameURL, function(username){ 
     jsonComments[0].deleteButton = (jsonComments[0].username === username) 
     // programming logic 
    }); 
}); 

주로, 나는 모두 정보가 필요 이유는 코드 샘플의 3 행에 설명되어 있습니다.

내가 가지고있는 질문은 전통적으로 받아 들여질 수있는 구현인가? 작동하지만 더 적절한 방법으로 구현할 수 있습니다. 협약을 염려하는 이유와이를 수행 할 수있는 적절한 방법은 내 지식 만이 아니라 코드가 깨끗하고 정확해야한다는 학교 과제이므로 (작동하는 것만이 아님).

답변에 대해 매우 감사드립니다.

+0

콘솔 오류/출력이 있습니까? – Derek

+0

모두 예상대로 작동하며 콘솔은 예상 응답과 함께 2 회의 get-request를 보냅니다. – diaco

+0

글쎄, 질문에 대답하기 위해, 그것은 콘솔에서 얻은 정보입니다. 그래서 콘솔에 오류가 없습니다. – diaco

답변

2

return 문을합니다.

var commentsPromise = $.getJSON(getCommentsURL); 
var usernamePromise = $.getJSON(getUsernameURL); 

// when both requests complete 
$.when(commentsPromise, usernamePromise).then(function(jsonComments, username) { 
    jsonComments[0].deleteButton = (jsonComments[0].username === username) 
    // programming logic 
}); 
+0

이것은 실제로 훨씬 더 좋아 보입니다. 나는 이와 같은 것을 찾고 있었지만 찾을 수 없었다. Thats는 중첩 된 구현의 이유입니다. – diaco

1

질문에서의 접근 방식은 예상 결과를 반환해야하며, .then()을 택일 적으로 사용할 수 있습니다. 오류를 처리하기 위해 또는 .catch().then()에 연결하여 포함 할 수도 있습니다. $.when -이 Promise.all에 jQuery의 대답을 사용하기위한 좋은 사용 사례입니다 .then()

$.getJSON(getCommentsURL) 
.then(function(jsonComments) { 
    return $.getJSON(getUsernameURL) 
      .then(function(username){ 
      jsonComments[0] 
      .deleteButton = (jsonComments[0].username === username) 
      // programming logic 
      }); 
}) 
.fail(function(jqxhr, textStatus, errorThrown) { 
    console.log(errorThrown) 
}) 
+0

이 필요하므로 catch() 또는 fail() 함수가 필요하지 않습니다. 이 방법은 코드를 더 길게 만든다. 다른 메소드를 사용하더라도, 여전히 중첩 된 getJSON 구현입니다. 어쨌든 고마워! – diaco