Чтобы ответить на вопрос:
Почему мой код производит вывод
Вы повторяете файлы в своем запросе. При этом вы сначала звоните:
console.log('before')
Затем вы звоните sizeOf()
. Он планирует обратный вызов, который вы передаете для выполнения позже, в каком-то другом стеке.
Затем вы вызываете:
console.log("after")
Затем выполняется запланированный вами обратный вызов, и вы нажимаете resizeImage1()
который вызывает:
console.log("resize_image_outputpath ");
Вот почему ваш результат:
before
after
resize_image_outputpath
Я не уверен, почему вы ожидаете, что console.log("after")
выполнится до console.log('before')
, учитывая что код выполняется сверху вниз, за исключением asyn c -scheduled callback.
Изменить
Вы можете попробовать что-то вроде:
app.post('/upload', upload.array('file'), (req, res) => {
var imagelist = [];
(req.files).forEach(async function (file) {
if (file.mimetype == 'image/jpeg' || file.mimetype == 'image/png') {
imagelist.push([file.originalname, __basefolder + file.originalname]);
var sizeOf = require('image-size');
console.log("before");
await new Promise(resolve => {
sizeOf(__basefolder + file.originalname, function (err, dimensions) {
if (dimensions.width > 128 && dimensions.height > 128) {
const resize_2 = resizeImage1(__basefolder, file.originalname, dimensions, 2);
imagelist.push([resize_2, 2+"___"+file.originalname]);
}
resolve()
});
});
console.log("after");
}
});
res.json(imagelist);
const file = req.file;
Это приведет к появлению журналов в ожидаемом вами порядке.