Узел readline с асинхронным вызовом API, как узнать, когда закрывать () - PullRequest
0 голосов
/ 21 мая 2019
const express = require('express');
const fs = require('fs');
const readLine = require('readline')
const app = express();
const port = 3000;

app.get('/', (req, res, next) => {

  let aylinResponseArray = [];
  let sendLine = readLine.createInterface({
    input: fs.createReadStream('my-file.txt'),
  });

sendLine.on('line', (line) => {
//multiple async API calls made here, I push response on my API's done callback.
}).on('close', function() {
console.log('finished');
  });
  res.end();
});

Когда я вхожу в конечную точку и запускаю это, я заканчиваю раньше всего остального. Очевидно, что я не правильно использую принципы асинхронности / ожидания, буду рад получить ваш опыт по этому вопросу.

Я пробовал разные подходы, тот, который я нашел близко к тому, что я ищу, выглядит так:

const { once } = require('events');
const { createReadStream } = require('fs');
const { createInterface } = require('readline');

(async function processLineByLine() {
  try {
    const rl = createInterface({
      input: createReadStream('big-file.txt'),
      crlfDelay: Infinity
    });

    rl.on('line', (line) => {
      // Process the line.
    });

    await once(rl, 'close');

    console.log('File processed.');
  } catch (err) {
    console.error(err);
  }
})();

Тем не менее, я получаю ошибку переноса с узла, заявляющую, что once is not a function.

Я только что привел вышеупомянутое в качестве пробной версии, если у вас есть более простое решение для моего кода выше, пожалуйста, дайте мне знать

...