Мне нужно немного помочь, как я могу справиться с следующей задачей в JavaScript: У меня есть приложение, которое использует Jimp для обработки изображений и генератора узлов-спрайтов. Это все работает в контексте node.js. Я загружаю несколько изображений в Jimp, делаю что-то с изображением, а затем записываю его обратно в свою файловую систему с помощью файла nodejs filemodule. Затем я бы взял новые созданные изображения и вставил их в узел-спрайт-генератор. Проблема в том, что не все изображения создаются/записываются в это время. Хотя код для создания спрайтов запускается сразу же после возвращения Jimp, я думаю, что Jimp обрабатывает все изображения и возвращает обещание. В результате создается код для создания спрайта, но стек не выполняется.Проверьте, полностью ли написан файл с node.js
Я пытался проверить, если файл записывается с fs.stat() и СВОЙСТВ как
время измененияif (stat.mtime.getTime() === prev.mtime.getTime())
Но тогда это может случится, что произошла ошибка, когда файл не создается в в этот раз. Кроме того: мне нужен способ проверить, полностью ли написано изображение с обработкой, когда путь к изображению в настоящее время недоступен.
function resize(img) {
Jimp.read(img.path).then(function (err, file) {
if (err) throw err;
file.resize(200, 200)
.quality(70)
.write(newPath); //newPath for simplicity
});
}
function rec(imgObjArray) {
if(_.isEmpty(imgObjArray)) return;
resize(imgObjArray.pop());
//correct mistake in function call from fn() to rec()
rec(imgObjArray);
}
rec(imgObjArray); //imgObjArray === [img,img,img....]
//nsg() does not work because not all images are written at this time
nsg({
src: [
'out/images/desktop/*.jpg'
],
spritePath: 'out/images/desktop/sprite.jpg',,
compositor: 'jimp'
}, function (err) {
console.log('Sprite generated!');
})
Я думаю, что сначала я должен проверить, существует ли изображение по заданному пути, а затем проверить, завершена ли запись. Но когда я делаю fn с fs.access (путь [, режим], обратный вызов), и файл не создается в это время, я получаю сообщение об ошибке.
Если у вас есть обещание, вам нужно использовать его для выполнения следующего действия, когда первый будет выполнен. Было бы полезно увидеть ваш код или, по крайней мере, часть его, где вы выполняете задачи, для предоставления каких-либо полезных рекомендаций по его устранению. – Jason
Я тоже так думал, поэтому я делаю функцию then() для очереди jimp, которая содержит fn-call для выполнения кода спрайт-листа. Но у меня такая же проблема. – Zantinger
Вам нужно показать нам свой код. Вопросы о коде должны включать соответствующий код в ваш вопрос. Мы могли бы, вероятно, помочь в считанные минуты, если вы покажете нам код. – jfriend00