承诺似乎并不召唤决心



我有以下代码:

const multer = require('multer');
const multerUploadWorker = async(req, res, storage) => {
console.log('worker called');

const upload = multer({ storage: storage }).single('file');
upload(req, res, function (error) {
if (error) {
return Promise.reject();
} else {
console.log('resolve called');
return Promise.resolve();
}
});
};
module.exports = multerUploadWorker;

和:

const { success, fail } = require('../utils/response-util');
const multer = require('multer');
const multerUploadWorker = require('../workers/multer-upload-worker');
const path = require('path');
const upload = async(req, res) => {
const storage = multer.diskStorage({
destination: function (_, _, cb) {
cb(null, 'uploads/')
},
filename: function (_, file, cb) {
const ext = path.extname(file.originalname);
switch (ext) {
case '.jpg':
case '.JPG':
case '.jpeg':
case 'JPEG':
case '.png':
case '.PNG':
case '.gif':
case '.GIF':
cb(null, Date.now() + ext);
break;
default:
cb('File type error', false);
break;
}
}
});

try {
if (await multerUploadWorker(req, res, storage)) {
return success(res, { message: req.file });
}
} catch(error) {
return fail(
res, 'Something went wrong, please check the image type is 
JPEG, GIF or PNG', '500'
);
}
};
module.exports = {
upload
};

似乎尽管控制台在multerUploadWorker内部记录resolve called,但它不会触发if (await multerUploadWorker(req, res, storage))条件。没有抛出错误,只是什么也没发生。我在这里做错了什么?

您对承诺的使用不正确。multerUploadWorker应该返回承诺,但在您的情况下,它什么也没返回。

const multer = require('multer');
const multerUploadWorker = async(req, res, storage) => {
console.log('worker called');

const upload = multer({ storage: storage }).single('file');
return new Promise((resolve, reject) => {
upload(req, res, function (error) {
if (error) {
reject(error)
} else {
console.log('resolve called');
resolve();
}
});
});
};
module.exports = multerUploadWorker;

此外,您处理结果的方式,无需检查结果,因为您没有返回布尔值,只需等待上传完成,并且在语句中出现错误句柄catch

try {
await multerUploadWorker(req, res, storage))
return success(res, { message: req.file });
}

最新更新