繁体   English   中英

在回调函数中进行新的异步调用

[英]Make a new asynchronous call inside a callback function

我想使用Google AJAX Feed API来获取多个新闻提要并将它们显示在网页上。

我无法使用Google的FeedControl类,因为我想控制供稿项的显示方式。 剩下的唯一选择就是Google的Feed类。

我已经将其与单个供稿一起使用:提供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 Feed API,因此不知道占位符start_feed_download函数。

要做的就是通过grabFeeds函数开始获取提要的过程,该函数接受一系列提要。 grabFeeds启动feedWorker ,后者会启动第一个提要请求,然后立即返回(几乎可以肯定的是,在检索第一个提要之前)。 callback处理结果,然后要求feedWorker启动下一个提要请求(如果有)。

这里的“魔术”是feedWorkercallback都是closures ,因此,即使grabFeeds已经返回, indexfeeds变量也feeds继续存在(在称为“执行上下文”的对象中),只要任何引用它内部的东西。执行上下文-在我们的例子中,直到Google的内容不再引用callbackfeedWorker为止。

是的,您可以做到这一点,只要确保每次进行递归时都有两种情况(a)基本情况和(b)递归情况。

仅在第二种情况下,函数才调用自身,请确保您不在基本情况下,否则最终将导致无限递归。 例如,在此阶乘函数中,0是基本情况,其他都是递归情况

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

或者,您可以一次执行一次,即。 启动第一个,然后启动第二个,而不必等到第二个开始加载之前完全加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM