2013-11-25 13 views
19

2つのWebサーバーからデータを要求する必要があります。タスクは独立しています。したがって、私はaync.parallelを使用しています。今は私のウェブページの本文に「abc」、「xyz」、「Done」と書いています。Node.JSを理解するasync.parallel

タスクは同時に実行されるので、奇妙な出力に遭遇することはできますか?たとえば、

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); 
+1

「res」に書き込まれる順序は、最初にasync.parallelタスクのどちらが終了するかによって決まりますが、タスクは独立しているため、順序は関係ありません。 – Bulkan

+0

@Bulkan、ありがとう。しかし、「並列」は適切に機能していないようです。 [新しい質問](http://stackoverflow.com/questions/20186787/node-js-async-parallel-doesnt-wait-until-all-the-tasks-have-completed)をお読みください。 –

答えて

37

あなたは結果が印刷された順に絶対確実にしたい場合は、それらを書く/ callbacksを通じて(abc\nxyz\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: [one: 'abc\n', two: 'xyz\n'] 
}); 
+0

私は引数を渡すことができますが、並列関数内で長い操作を実行する必要があります –

+0

2つの文字列を(おそらくデータベースから)取得するために長い操作をしていると仮定していました。それを処理( 'res.write')します(順次)。 –

+0

これは天才です、ありがとうございます。 –

関連する問題