문제

사용하고 싶습니다 Google Ajax 피드 API 가져 오기 위해 다수의 뉴스 피드를 웹 페이지에 표시합니다.

피드의 항목이 표시되는 방식을 제어하고 싶기 때문에 Google의 FeedControl 클래스를 사용할 수 없습니다. 그로 인해 Google의 피드 클래스가 유일한 옵션으로 남게됩니다.

단일 피드와 함께 작동해야합니다. URL과 콜백 함수를 제공합니다. 콜백 함수 내부의 피드 결과를 처리하십시오.

내 질문 : 여러 피드를 어떻게 가져 오나요? 어떻게 든 콜백 함수 내부에 새로운 Google.feeds.feed 객체를 만들고 새로운 URL과 ... 동일한 콜백 기능 (?)을 제공해야합니다.

나는 컴퓨터 과학을 결코 공부하지 않았으므로 이런 종류의 재귀는 내 머리를 돌립니다. 누구든지 내가해야 할 일을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

물론, 당신은 그렇게 할 수 있습니다. 여기에 의사 코드가 있습니다.

// '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();
    }
}

Google 피드 API를 모르기 때문에 자리 표시자는 start_feed_download 기능.

그것이하는 일입니다 시작 이를 통해 피드를 잡는 과정 grabFeeds 피드 배열을 수용하는 함수. grabFeeds 시작하다 feedWorker, 첫 번째 피드 요청을 시작한 다음 반환합니다. 즉시 (거의 확실히 첫 번째 피드가 검색되기 전에). callback 결과를 처리 한 다음 묻습니다 feedWorker 다음 피드 요청을 시작합니다 (있는 경우).

여기서 "마법"이 그게 다행입니다 feedWorker 그리고 callback 둘 다입니다 폐쇄, 그래도 grabFeeds 이미 돌아 왔습니다 index 그리고 feeds 변수는 실행 컨텍스트 내부의 내용을 참조하는 한 ( "실행 컨텍스트"라고 불리는 개체에서), 우리의 경우, 우리의 경우, callback 그리고 feedWorker 더 이상 Google의 내용으로 언급되지 않습니다.

다른 팁

예, 그렇게 할 수 있습니다. 재귀를 할 때마다 두 가지 경우 (a) 기본 사례와 (b) 재귀 사례가 있는지 확인하십시오.

두 번째 경우에만 함수는 자체 호출을하고, 기본 케이스에 있지 않도록하십시오. 그렇지 않으면 무한 재귀로 끝납니다. 예를 들어,이 FARTORION 함수 0에서 기본 사례는 다른 모든 것이 재귀 사례입니다.

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

또는 한 번에 하나씩 할 수 있습니다. 첫 번째를 시작한 다음 두 번째를 시작한 다음 두 번째로로드를 시작하기 전에 하나가 완전히로드 될 때까지 두 번째를 시작하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top