Используйте ImageMagic синхронно - PullRequest
1 голос
/ 22 мая 2019

Попробуйте использовать imagemagick

Необходимо использовать imagemagick синхронно.

Т.е. следующий код должен выполняться только после того, как преобразование изображения будет завершено (независимо от того, с ошибкой или успешно)

Я вижу только одно решение с deasync :

const ImageMagick = require('imagemagick');
const Deasync = require('deasync');

var finished = false;
ImageMagick.convert(
  [
    source,
    path_to
  ],
  function(err, stdout){
    finished = true;
});

Deasync.loopWhile(function(){return !finished;});

// the next code performed only after image convertion will be done

Есть ли варианты синхронной работы с imagemagick?

1 Ответ

4 голосов
/ 22 мая 2019

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

const ImageMagick = require('imagemagick');

ImageMagick.convert(
  [
    source,
    path_to
  ],
  function(err, stdout){
    // the next code performed only after image convertion will be done
});

Или вы можете использовать Promise и await, но тогда вся ваша функция будет асинхронной

const ImageMagic = require('imagemagick');

function convertImage(source, path_to){
    return new Promise((resolve, reject) => {
        ImageMagick.convert(
            [
                source,
                path_to
            ],
            function(err, stdout){
                if(err) {
                    reject(err)
                }
                resolve(stdout);
            });
    })
}

async function doStuff(){
    // start the image convert
    let stdout = await convertImage(source, path_to);
    // now the function will go on when the promise from convert image is resolved
    // the next code performed only after image convertion will be done
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...