web-dev-qa-db-ja.com

Node.JS async.parallelを理解する

2つのWebサーバーからデータを要求する必要があります。タスクは独立しています。したがって、私は aync.parallel を使用しています。現在、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);
25
Maksim Dmitriev

結果を印刷する順序を完全に確実にしたい場合は、データ(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'
});
50
Michael Tang