Pregunta

Me gustaría usar el Feed de AJAX de Google API para obtener múltiples fuentes de noticias y mostrarlas en una página web.

No puedo usar la clase FeedControl de Google porque quiero controlar la forma en que se muestran los elementos de la fuente. Eso me deja con la clase Feed de Google como la única opción.

Lo tengo para trabajar con una sola fuente: proporcionar una URL y una función de devolución de llamada; procesar los resultados de la alimentación dentro de la función de devolución de llamada.

Mi pregunta: ¿Cómo obtengo varias fuentes? De alguna manera tendría que crear un nuevo objeto google.feeds.feed dentro de la función de devolución de llamada y proporcionarle una nueva URL y ... la misma función de devolución de llamada (?)

Nunca estudié ciencias de la computación, así que este tipo de recursión me da vueltas. ¿Alguien puede explicar lo que tengo que hacer?

¿Fue útil?

Solución

Claro, puedes hacerlo de esta manera, aquí hay un pseudocódigo:

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

No conozco la API de Google Feed, por lo tanto, la función start_feed_download .

Lo que hace es iniciar el proceso de capturar las fuentes a través de la función grabFeeds , que acepta una serie de fuentes. grabFeeds inicia feedWorker , que inicia la primera solicitud de feed, y luego devuelve inmediatamente (casi con seguridad antes de que se recupere el primer feed). callback procesa el resultado y luego solicita a feedWorker que inicie la próxima solicitud de feed (si la hay).

La " magia " aquí es que feedWorker y callback son cierres , por lo que aunque ya ha regresado grabFeeds , las variables index y feeds siguen activas (en un objeto llamado " contexto de ejecución ") siempre que algo haga referencia a las cosas dentro del contexto de ejecución, en nuestro caso, hasta que callback y feedWorker no estén ya hace referencia a las cosas de Google.

Otros consejos

Sí, puede hacerlo bien, solo asegúrese de que cada vez que realice una recursión tenga dos casos (a) el caso base y (b) el caso recursivo.

Solo en el segundo caso la función se llama a sí misma, asegúrese de no hacerlo en el caso base o de lo contrario terminará con una recursión infinita. Por ejemplo, en esta función factorial 0 es el caso base, todo lo demás es el caso recursivo

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

Alternativamente, puedes hacerlas una a la vez, es decir. inicie el primero, luego inicie el segundo, en lugar de tener que esperar a que uno se cargue por completo antes de que el segundo comience a cargarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top