Promise 好像不是在调用 resolve
Promise does not seem to be calling resolve
我有以下代码:
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))
条件。没有错误被抛出,只是什么也没有发生。我在这里做错了什么?
您对 Promises 的使用不正确。 multerUploadWorker
应该 return 承诺,但在你的情况下 return 没什么。
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;
还有你处理结果的方式,不需要检查结果,因为你不是 returning 布尔值,只需等待上传完成,以防在 catch
中处理错误声明:
try {
await multerUploadWorker(req, res, storage))
return success(res, { message: req.file });
}
我有以下代码:
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))
条件。没有错误被抛出,只是什么也没有发生。我在这里做错了什么?
您对 Promises 的使用不正确。 multerUploadWorker
应该 return 承诺,但在你的情况下 return 没什么。
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;
还有你处理结果的方式,不需要检查结果,因为你不是 returning 布尔值,只需等待上传完成,以防在 catch
中处理错误声明:
try {
await multerUploadWorker(req, res, storage))
return success(res, { message: req.file });
}