Question

Je souhaite utiliser le flux Google AJAX. API permettant d'extraire des flux d'actualités multiples et de les afficher sur une page Web.

Je ne peux pas utiliser la classe FeedControl de Google, car je souhaite contrôler le mode d'affichage des éléments du flux. Cela me laisse avec la classe Feed de Google comme seule option.

Je l'ai avec un seul flux: fournit une URL et une fonction de rappel; traiter les résultats du flux dans la fonction de rappel.

Ma question: comment puis-je récupérer plusieurs flux? Il me faudrait en quelque sorte créer un nouvel objet google.feeds.feed dans la fonction de rappel et lui fournir une nouvelle URL et ... la même fonction de rappel (?)

Je n’ai jamais étudié les sciences informatiques, alors ce genre de récursion me fait tourner la tête. Tout le monde peut expliquer ce que je dois faire?

Était-ce utile?

La solution

Bien sûr, vous pouvez le faire de cette façon, voici un pseudocode:

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

Je ne connais pas l'API Google Feed, d'où la fonction d'espace réservé start_feed_download .

Cela a pour effet de démarrer le processus de récupération des flux via la fonction grabFeeds , qui accepte un tableau de flux. grabFeeds lance feedWorker , qui initialise la première demande de flux, puis renvoie immédiatement (presque certainement avant l'extraction du premier flux). callback traite le résultat, puis demande à feedWorker de lancer la demande de flux suivante (le cas échéant).

La "magie" voici que feedWorker et callback sont tous deux fermetures . Ainsi, même si grabFeeds a déjà été renvoyé, les variables index et feeds sont conservées. (dans un objet appelé "contexte d'exécution") tant que rien ne fait référence aux éléments du contexte d'exécution - dans notre cas, jusqu'à ce que callback et feedWorker ne soient plus référencé plus longtemps par les données de Google.

Autres conseils

Oui, vous pouvez le faire sans problème. Assurez-vous toutefois que chaque fois que vous effectuez une récursivité, vous avez deux cas (a) le cas de base et (b) le cas récursif.

La fonction ne s’appelle elle-même que dans le second cas. Assurez-vous de ne pas le faire dans le cas de base, sinon vous obtiendrez une récursion infinie. Par exemple, dans cette fonction factorielle, 0 est le cas de base, tout le reste est le cas récursif

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

Vous pouvez également les exécuter un par un, c.-à-d. démarrez le premier, puis le second, au lieu d'attendre le chargement complet de l'un avant que le second ne commence à se charger.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top