0

私の要件は以下のようなものです:

big_file_1、big_file_2、big_file_3 の 3 つの大きなファイルがあります。この 3 つの大きなファイルを非同期で読み取り、すべてのファイルの読み取りが完了してから残りのコードを処理したいと考えています。

fs.readFile('big_file_1', function (err, data) {
  if (err) throw err;
  content_1 = data;
});
fs.readFile('big_file_2', function (err, data) {
  if (err) throw err;
  content_2 = data;
});
fs.readFile('big_file_3', function (err, data) {
  if (err) throw err;
  content_3 = data;
});
// Do something with content_1, content_2 and content_3

Node.JS でこれを達成するにはどうすればよいですか?

4

1 に答える 1

2

async ライブラリparallelの関数を使用して実行できます。

async.parallel([
  fs.readFile.bind(fs, 'big_file_1'),
  fs.readFile.bind(fs, 'big_file_2'),
  fs.readFile.bind(fs, 'big_file_3')
], function (err, results) {
  if (err) throw err;
  content_1 = results[0]
  content_2 = results[1]
  content_3 = results[2]
  /* TODO do some cool stuff */
})

または、手動で行うこともできます。

int steps_done = 0
fs.readFile('big_file_1', function(err, data) {
  if (err) throw err
  content_1 = data
  if (++steps_done == 3) do_next_step()
})
fs.readFile('big_file_2', function(err, data) {
  if (err) throw err
  content_2 = data
  if (++steps_done == 3) do_next_step()
})
fs.readFile('big_file_3', function(err, data) {
  if (err) throw err
  content_3 = data
  if (++steps_done == 3) do_next_step()
})
于 2013-04-03T16:50:25.943 に答える