Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在回调函数中进行新的异步调用_Javascript_Function_Asynchronous_Callback - Fatal编程技术网

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

Javascript 在回调函数中进行新的异步调用,javascript,function,asynchronous,callback,Javascript,Function,Asynchronous,Callback,我想使用获取多个新闻源并将其显示在网页上 我不能使用Google的FeedControl类,因为我想控制feed项的显示方式。这让我只能选择谷歌的Feed类 我让它与一个提要一起工作:提供一个url和一个回调函数;在回调函数中处理提要的结果 我的问题:如何获取多个提要?我必须在回调函数中创建一个新的google.feeds.feed对象,并为它提供一个新的url和。。。相同的回调函数(?) 我从未学过计算机科学,所以这种递归让我头晕目眩。 任何人都可以解释我必须做什么?是的,你可以这样做好的,只

我想使用获取多个新闻源并将其显示在网页上

我不能使用Google的FeedControl类,因为我想控制feed项的显示方式。这让我只能选择谷歌的Feed类

我让它与一个提要一起工作:提供一个url和一个回调函数;在回调函数中处理提要的结果

我的问题:如何获取多个提要?我必须在回调函数中创建一个新的google.feeds.feed对象,并为它提供一个新的url和。。。相同的回调函数(?)

我从未学过计算机科学,所以这种递归让我头晕目眩。
任何人都可以解释我必须做什么?

是的,你可以这样做好的,只要确保每当你做递归时,你有两种情况(a)基本情况和(b)递归情况

只有在第二种情况下,函数才会调用自己,请确保在基本情况下不这样做,否则将导致无限递归。例如,在这个阶乘函数中,0是基本情况,其他一切都是递归情况

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

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

当然,您可以这样做,下面是一些伪代码:

// '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();
    }
}
/“提要”是提要URL的数组
函数提要(提要){
var指数;
//我们从第一个提要开始
指数=0;
//启动流程
饲料工人();
//我们的“获取下一个提要”功能
函数feedWorker(){
变量饲料;
//我们还有吗?
如果(索引
我不知道GoogleFeedAPI,因此使用了占位符
start\u Feed\u download
函数

这样做的目的是通过
grabbeeds
函数开始抓取提要的过程,该函数接受提要数组
grabbeeds
启动
feedWorker
,它启动第一个提要请求,然后立即返回(几乎肯定是在检索第一个提要之前)<代码>回调处理结果,然后要求feedWorker启动下一个提要请求(如果有)


这里的“魔力”在于
feedWorker
callback
两者都是,因此即使
grabbeeds
已经返回,
index
feed
变量仍然存在(在一个称为“执行上下文”的对象中),只要有任何东西引用执行上下文中的东西——在我们的例子中,直到
callback
feedWorker
不再被谷歌的东西引用。

对不起,我必须指出你的阶乘函数中的经典错误。基本情况n==0应该返回1,而不是0。感谢您指出这一点,我真的需要在发布itthanks之前测试我的代码,这就成功了。感谢您对闭包的补充说明。现在读起来。