Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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 理解Node.JS async.parallel_Javascript_Node.js_Parallel Processing - Fatal编程技术网

Javascript 理解Node.JS async.parallel

Javascript 理解Node.JS async.parallel,javascript,node.js,parallel-processing,Javascript,Node.js,Parallel Processing,我需要从两个web服务器请求数据。任务是独立的;因此,我正在使用。现在我只在我的网页主体上写“abc”、“xyz”和“Done” 由于任务是同时执行的,我会遇到奇怪的输出吗?例如: xab cyz 代码。 var async = require('async'); function onRequest(req, res) { res.writeHead(200, { "Content-Type" : "text/plain" }); async.pa

我需要从两个web服务器请求数据。任务是独立的;因此,我正在使用。现在我只在我的网页主体上写“abc”、“xyz”和“Done”

由于任务是同时执行的,我会遇到奇怪的输出吗?例如:

xab
cyz
代码。

var async = require('async');

function onRequest(req, res) {
    res.writeHead(200, {
        "Content-Type" : "text/plain"
    });

    async.parallel([ function(callback) {
        res.write('a');
        res.write('b');
        res.write('c\n');
        callback();
    }, function(callback) {
        res.write('x');
        res.write('y');
        res.write('z\n');
        callback();
    } ], function done(err, results) {
        if (err) {
            throw err;
        }
        res.end("\nDone!");
    });

}

var server = require('http').createServer(onRequest);
server.listen(9000);

如果要绝对确定结果的打印顺序,应通过(第一个参数是错误)传递数据(
abc\n
xyz\n
),并在最后的
async.parallel
回调的
results
参数中处理/写入它们

async.parallel({
    one: function(callback) {
        callback(null, 'abc\n');
    },
    two: function(callback) {
        callback(null, 'xyz\n');
    }
}, function(err, results) {
    // results now equals to: results.one: 'abc\n', results.two: 'xyz\n'
});

写入
res
的顺序取决于哪个async.parallel任务首先完成,但由于任务是独立的,因此顺序不重要。@Bulkan,谢谢。但是并行似乎不能正常工作。请阅读。我可以传递参数,但我应该在并行函数中执行长操作。我假设您正在执行一些长操作来获取两个字符串(可能来自数据库),建议将用于检索数据的代码(并行)和处理(
res.write
)的代码(顺序)分开。这就是Genius,谢谢你们在这里的谈话,伙计们。迈克尔·唐给出了正确的答案吗?不clear@Green我想有些评论已经丢失了。。。基本上,我的意思是,向控制台写入数据是人们希望同步的事情,因此应该在
并行
的回调中执行。
parallel
的第一个参数中的函数应该负责获取任何数据(可以以任何顺序异步完成)并为
parallel
的回调收集数据。在本例中,我们使用简单的函数调用
并行
,但可以想象从磁盘或网络读取数据。