Javascript 使用库方法的代码流。输出不符合预期
[我正在努力实现的目标:]上传一组图像,然后返回图像名称,并调整图像名称的大小 我有一个代码来调整过大的图像。为什么我的代码按预期生成输出?在那个房间里 在下面的示例中,输出为:Javascript 使用库方法的代码流。输出不符合预期,javascript,node.js,mern,Javascript,Node.js,Mern,[我正在努力实现的目标:]上传一组图像,然后返回图像名称,并调整图像名称的大小 我有一个代码来调整过大的图像。为什么我的代码按预期生成输出?在那个房间里 在下面的示例中,输出为: before after resize_image_outputpath before after resize_image_outputpath 但我想要它: before resize_image_outputpath after })) 要回答这个问题: 为什么我的代码用于生成输出 您正在迭代请求中的文件。
before
after
resize_image_outputpath
before
after
resize_image_outputpath
但我想要它:
before
resize_image_outputpath
after
}))
要回答这个问题: 为什么我的代码用于生成输出 您正在迭代请求中的文件。当您这样做时,您首先调用:
console.log('before')
然后调用sizeOf()
。它安排您传递的回调稍后在其他堆栈上执行
然后你打电话:
console.log("after")
然后执行您计划的回调,点击resizeImage1()
,调用:
console.log("resize_image_outputpath ");
这就是为什么您的输出是:
before
after
resize_image_outputpath
before
after
resize_image_outputpath
我不知道为什么您希望console.log(“after”)
在console.log(“before”)
之前执行,因为代码是自顶向下执行的,异步计划回调除外
编辑 您可以尝试以下方法:
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;
这将按您期望的顺序生成日志。要回答此问题: 为什么我的代码用于生成输出 您正在迭代请求中的文件。当您这样做时,您首先调用:
console.log('before')
然后调用sizeOf()
。它安排您传递的回调稍后在其他堆栈上执行
然后你打电话:
console.log("after")
然后执行您计划的回调,点击resizeImage1()
,调用:
console.log("resize_image_outputpath ");
这就是为什么您的输出是:
before
after
resize_image_outputpath
before
after
resize_image_outputpath
我不知道为什么您希望console.log(“after”)
在console.log(“before”)
之前执行,因为代码是自顶向下执行的,异步计划回调除外
编辑 您可以尝试以下方法:
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;
这将按照您期望的顺序生成日志。为什么您希望此代码以不同的顺序运行?更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小后,为什么您希望此代码以不同的顺序运行?更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小,后处理突出显示。。更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小,后处理突出显示。。更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小,之后