команда ghostscript в цикле обещаний - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь поместить команду Ghostscript в цикл, чтобы иметь возможность обрабатывать большие PDF-файлы кусками по десять страниц. Я не могу понять это правильно. Каждая команда Ghostscript должна завершиться до начала следующей.

//first I create chunks (arrays of 10 items) from my original array
const pageChunks    = arr.chunk(pdfData.formImage.Pages, 10);

const pagePromises  = [];

let processScript = async (index, chunk) => {
        await new Promise((resolve, reject) => {
            gs()
                .batch()
                .nopause()
                .q()
                .device('jpeg')
                .executablePath('lambda-ghostscript/bin/./gs')
                .option('-dFirstPage=' + ((index * 10) + 1))
                .option('-dLastPage=' + ((index * 10) + Math.min(chunk.length, 10)))
                .res(pdfRes)
                .output(path.join(jpegPagesFolder, identifier + fileSfx))
                .input(preparedPdf)
                .exec(async (err, stdout, stderr) => {
                    if (err) {
                        err.originalMessage = err && err.message ? err.message : 'Unknown error';
                        err.message = 'Error running Ghostscript';
                        err.bucket = bucketName;
                        err.identifier = identifier;

                        return response.sendError(res, 400, 'Error running Ghostscript')(err);
                    } else {
                        log.debug('Ghostscript chunk ' + (index + 1) + ' completed successfully');
                    }
                })
        });
    };

    await pageChunks.map((chunk, index) => {
        pagePromises.push( processScript(index, chunk));
    });

    let chain = Promise.resolve();

    for (const func of pagePromises) {
        chain = chain.then(func);
    }

Я пробовал и несколько других подходов, например

Promise.all(pagePromises)

Но без сигары. Все команды Ghostscripts продолжают запускаться сразу друг за другом, не дожидаясь друг друга, что портит выходные файлы.

...