콜백 함수 내부에서 새로운 비동기 호출을하십시오
-
05-07-2019 - |
문제
사용하고 싶습니다 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) }
}
또는 한 번에 하나씩 할 수 있습니다. 첫 번째를 시작한 다음 두 번째를 시작한 다음 두 번째로로드를 시작하기 전에 하나가 완전히로드 될 때까지 두 번째를 시작하십시오.