Как разрешить Обещание после цикла for, который реализует другое Обещание? - PullRequest
0 голосов
/ 27 марта 2019

Я использую Mozilla PDF.js модуль в Promise для преобразования каждой страницы PDF в изображение JPG.Мой код создает изображения файлов с помощью модуля fs, и он используется как Promise с функцией promisify в модуле utils.На данный момент код работает отлично, но я поместил функцию Resolve после, и она не запускается, а Promise зависает.Куда мне положить разрешение?

Я пытался в конце функции, но я боюсь, что способ обработки Promise не полностью выполнен, и яостановка, потому что реализация Promise, которую мне пришлось сделать, чтобы заставить работать модуль PDF.js

const CanvasFactory = require('./../../lib/canvas/canvas');
const pdfjsLib = require('./../../lib/pdf.js/node_modules/pdfjs-dist');

const fs = require('fs');
const { promisify } = require('util');

const writeFile = promisify(fs.writeFile);
const convertPDF2PNG = (pdfFilePath) => new Promise((resolve, reject) => {
  const loadingTask = pdfjsLib.getDocument(pdfFilePath);
  loadingTask.promise.then((pdf) => {
    const maxPages = pdf.numPages;
    const convertPDFPromises = [];
    for (let i = 1; i <= maxPages; i += 1) {
      const page = pdf.getPage(i);
      convertPDFPromises.push(page.then(page => {
        const viewport = page.getViewport({ scale: 1.0 });
        const canvasFactory = new CanvasFactory();
        const canvasAndContext = canvasFactory.create(viewport.width, viewport.height);
        const renderContext = {
          canvasContext: canvasAndContext.context,
          viewport,
          canvasFactory,
        };
        const renderTask = page.render(renderContext);
        renderTask.promise.then(() => {
          const image = canvasAndContext.canvas.toBuffer();
          writeFile(`temporal/output${i}.jpg`, image)
            .then(() => {
              // TODO: add query to insert images in Database
              console.log(`File ${i} added`);
            })
            .catch(writeErr => {
              console.error(writeErr)
              reject(writeErr);
            });
          })
          .catch(err => {
            console.error(err);
            reject(err);
          }); 
      }));
    }
  })
  .catch(reason => {
    console.error(reason);
    reject(reason);
  });
  resolve();
});

Это ответы, которые я получаю на консоли

File 2 added
File 3 added
File 1 added

Я хочу знать, почему Promise не разрешается.

...