2009-10-21 4 views
1

Google AJAX Feed API을 사용하여 개의 뉴스 피드를 가져 와서 웹 페이지에 표시하고 싶습니다.콜백 함수 내에서 비동기 호출을 새로 작성하십시오.

피드의 항목이 표시되는 방식을 제어하려고하므로 Google의 FeedControl 클래스를 사용할 수 없습니다. 따라서 Google의 Feed 클래스가 유일한 옵션으로 남습니다.

URL을 제공하고 콜백 기능을 제공합니다. 피드의 결과를 콜백 함수 내에서 처리합니다.

내 질문 : 여러 피드를 가져 오는 방법은 무엇입니까? 나는 어떻게 든 콜백 함수 내에 새로운 google.feeds.feed 객체를 만들어야하고 새로운 URL을 제공하고 ... 같은 콜백 함수 (?)를 반환해야한다.

나는이 종류의 컴퓨터 과학을 결코 공부하지 않았다. 재귀가 내 머리를 회전시킵니다. 누구나해야 할 일을 설명 할 수 있습니까?

답변

3

물론, 여기에 몇 가지 의사입니다.

시작 피드 배열을 허용하는 grabFeeds 함수를 통해 피드를 가져 오는 프로세스입니다. grabFeedsfeedWorker을 시작하여 첫 번째 피드 요청을 시작한 다음 을 즉시 (첫 번째 피드를 가져 오기 전에 거의 확실하게)을 반환합니다. callback은 결과를 처리 한 후 feedWorker에게 다음 피드 요청이있는 경우이를 시작하도록 요청합니다. 여기

은 "마법"feedWorkercallback 모두 closures, 그래서 비록 grabFeeds 이미 indexfeeds 변수는 아무것도 참조만큼 오랫동안 (객체에 "실행 컨텍스트"라고도 함)에 살고, 돌아왔다이다 실행 컨텍스트 내부의 것들 - 우리의 경우, callbackfeedWorker까지는 Google의 물건에 의해 더 이상 참조되지 않습니다.

+0

감사합니다. 폐쇄에 대한 추가 설명 주셔서 감사합니다. 그것에 지금 읽는. – Jan

0

예, 괜찮습니다. 재귀를 할 때마다 (a) 기본 사례와 (b) 재귀 사례가 있어야합니다.

두 번째 경우에만 함수가 자체적으로 함수를 호출하므로 기본 case에 없는지 확인하십시오. 그렇지 않으면 무한 재귀가 발생합니다. 예를 들어,이 계승 기능 0 기본 경우와, 다른 모든 대안 재귀 경우

function fact(n) { 
    if (n==0) { return 1; } 
    else { return n * factorial(n-1) } 
} 

, 당신은 즉, 한 번에 하나씩 할 수 있습니다. 첫 번째로드를 시작하기 전에 하나가 완전히로드 될 때까지 기다릴 필요없이 첫 번째로드를 시작한 다음 두 번째로드를 시작하십시오. 나는 구글이 API 피드 모르는

// 'feeds' is an array of the feed URLs 
function grabFeeds(feeds) { 
    var index; 

    // We start with the first feed 
    index = 0; 

    // Kick off the process 
    feedWorker(); 

    // Our "go get the next feed" function 
    function feedWorker() { 
     var feed; 

     // Do we have any more? 
     if (index < feeds.length) { 
      // Yes, request it and bump our index 
      // (You could combine these lines, but it's 
      // clearer to keep them separate) 
      feed = feeds[index]; 
      ++index; 
      start_feed_download(feed, callback); 
     } 
    } 

    // Our callback function 
    function callback() { 
     // ...do something with the result... 

     // Kick of the next feed (feedWorker is defensive, 
     // so we don't have to check index here) 
     feedWorker(); 
    } 
} 

, 따라서 자리 start_feed_download 기능 : 당신이 그것을 할 수있는 방법

+2

죄송합니다. 귀하의 계승 함수에서 고전적인 오류를 지적했습니다. 기본 경우 n == 0은 0이 아닌 1을 반환합니다. –

+0

지적 해 주셔서 고맙습니다. 게시하기 전에 코드를 테스트해야합니다. –

관련 문제