Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用库方法的代码流。输出不符合预期_Javascript_Node.js_Mern - Fatal编程技术网

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;

这将按照您期望的顺序生成日志。

为什么您希望此代码以不同的顺序运行?更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小后,为什么您希望此代码以不同的顺序运行?更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小,后处理突出显示。。更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小,后处理突出显示。。更正了我原来的帖子。我想上传一张图片,并返回图片名+调整大小的图片名。所以我希望控制台输出像以前一样,调整大小,之后