javascript - 使用数组在node.js中顺序执行

标签 javascript node.js

我正在学习 Node.js 中的顺序执行,并遇到了一个有趣的问题。

下面是我的代码。基本上,我在一个数组中有 5 个 RSS 提要,并且我试图按顺序输出它们的标题。为此,我创建了一系列函数并利用书中的这个辅助函数:

function next(err, result)
{
    if(err) throw new Error(err);

    var currentTask = tasks.shift();

    if(currentTask)
    {
        currentTask(result);
    }

}

现在,我的程序可以正常工作,如果我将数组准备为:

tasks = [

function(){handle(urls[0])},
function(){handle(urls[1])},
function(){handle(urls[2])},
function(){handle(urls[3])},
function(){handle(urls[4])}

];

但是,如果我准备如下,它会以随机顺序而不是顺序输出:

tasks = [

handle(urls[0]),
handle(urls[1]),
handle(urls[2]),
handle(urls[3]),
handle(urls[3]),

];

以上两个数组有什么区别?

完整代码:

var request = require('request');
var parser = require('htmlparser');

var urls = ['http://psychcentral.com/blog/feed/rss2/', 'http://davidicuswong.wordpress.com/feed/', 'http://www.theglobalconversation.com/blog/?feed=rss2', 'http://happiness-project.com/feed', 'http://www.marriagemissions.com/feed/'];

function handle(url)
{
    request(url, function(error, response, body)
    {
        if (!error && response.statusCode == 200)
        {
            var handler = new parser.RssHandler();
            var rssParser = new parser.Parser(handler);

            rssParser.parseComplete(body);

            if (handler.dom.items.length)
            {
                var item = handler.dom.items.shift();
                console.log(item.title);
                console.log(item.link);
            }

           next(null, null);
        }


    });

}

function next(err, result)
{
    if(err) throw new Error(err);

    var currentTask = tasks.shift();

    if(currentTask)
    {
        currentTask(result);
    }

}


tasks = [

function(){handle(urls[0])},
function(){handle(urls[1])},
function(){handle(urls[2])},
function(){handle(urls[3])},
function(){handle(urls[4])}

];

next();

最佳答案

What is the difference between above 2 arrays?

嗯,第一个是函数数组,而第二个是未定义数组。

but how come it still executes and outputs in random order though?

正在执行它(而不是next()队列),并且它们并行执行,因此异步回调以不确定的顺序返回。

关于javascript - 使用数组在node.js中顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166812/

相关文章:

javascript - 无法从运行脚本的浏览器端连接到 Openfire 服务器

javascript - 如何设置与主文件分开的快速路线?

mysql - Nodejs Mysql 仅插入一项

node.js - 进行异步调用的 Express 中间件

javascript - botbuilder v4 nodejs 在提示对话框中添加快速回复 facebook messenger

javascript - 如何从 javascript 警报获取值到 asp.net 中的文本框

php - PHP 中 SQL 的下拉列表值

javascript - 如何删除重复结果并合并在 mySQL 查询中具有相似属性的对象?

java - 更改下拉选项

javascript - 字符串与字符串枚举不兼容