Pergunta

Eu gostaria de usar o Google AJAX de alimentação API para buscar múltiplas newsfeeds e exibi-los em uma página web.

Eu não posso usar classe FeedControl do Google, porque eu quero controlar a forma como os itens da alimentação são exibidos. Isso deixa-me com classe Feed do Google como a única opção.

Eu tenho que trabalhar com um único feed: fornecer uma url e uma função de retorno; processar os resultados da alimentação no interior da função de retorno.

A minha pergunta: Como faço para buscar vários feeds? Eu de alguma forma tem que fazer um novo objeto google.feeds.feed dentro da função de retorno de chamada e fornecê-lo com um novo URL e ... o mesmo callback-função (?)

Eu nunca estudou ciências da computação, por isso este tipo de recursão faz minha cabeça girar. Alguém pode explicar o que eu tenho que fazer?

Foi útil?

Solução

Claro, você pode fazê-lo dessa maneira, aqui está um 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();
    }
}

Eu não sei a API do feed do Google, portanto, a função de espaço reservado start_feed_download.

O que faz é start o processo de agarrar os feeds através da função grabFeeds, que aceita uma matriz de feeds. grabFeeds começa feedWorker, que inicia a primeira solicitação de alimentação e retorna imediatamente (quase certamente antes da primeira alimentação são recuperados). callback processa o resultado, em seguida, pede feedWorker para lançar a próxima solicitação de alimentação (se houver).

A "mágica" aqui é que feedWorker e callback são ambos fechamentos , por isso mesmo que grabFeeds já voltou, as variáveis ??index e feeds viver (em um objeto chamado um "contexto de execução"), enquanto referências qualquer coisa coisas dentro do contexto de execução - no nosso caso , até callback e feedWorker já não são referenciados por coisas do Google.

Outras dicas

Sim, você pode fazer isso tudo bem, apenas certifique-se que sempre que você fazer recursão você tem dois casos (a) O caso base e (b) No caso recursiva.

Apenas no segundo caso faz a própria chamada de função, certifique-se de não fazer no caso base, ou então você vai acabar com uma recursão infinita. Por exemplo, nesta função factorial 0 é o caso base, tudo o resto é o caso recursiva

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

Como alternativa, você poderia fazê-las uma de cada vez, ou seja. iniciar o primeiro, em seguida, iniciar o segundo, em vez de ter que esperar por um estar completamente carregada antes da segunda começa a carregar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top