Я играю с некоторыми новыми функциями JavaScript, такими как async / await и генераторы.У меня есть функция readPages
с подписью
async function* readPages(....): AsyncIterableIterator<string> {}
, и я хочу объединить результат этой функции с некоторым разделителем.Вот как я это делаю сейчас
let array = new Array<string>();
for await (const page of readPages(...))
array.push(page);
let result = array.join(pagesDelimiter);
Думаю, это довольно многословно.Можно ли сделать это лучше?
Вот полный код для справки
import * as fs from 'fs';
import { PDFJSStatic, PDFDocumentProxy } from 'pdfjs-dist';
const PDFJS: PDFJSStatic = require('pdfjs-dist');
PDFJS.disableWorker = true;
async function* readPages(doc: PDFDocumentProxy, wordsDelimiter = '\t'): AsyncIterableIterator<string> {
for (let i = 1; i <= doc.numPages; i++) {
const page = await doc.getPage(i);
const textContent = await page.getTextContent();
yield textContent.items.map(item => item.str).join(wordsDelimiter);
}
}
async function pdfToText(filename: string, pagesDelimiter = '\n', wordsDelimiter = '\t') {
const data = new Uint8Array(fs.readFileSync(filename));
const doc = await PDFJS.getDocument(data);
const array = new Array<string>();
for await (const page of readPages(doc, wordsDelimiter))
array.push(page);
return array.join(pagesDelimiter);
}
pdfToText('input.pdf').then(console.log);