为了账号安全,请及时绑定邮箱和手机立即绑定

Promise 似乎没有调用 resolve

Promise 似乎没有调用 resolve

慕标琳琳 2022-10-13 10:32:08
我有以下代码: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};似乎虽然控制台resolve called在multerUploadWorker其中记录并不会触发if (await multerUploadWorker(req, res, storage))条件。没有错误被抛出,只是没有任何反应。我在这里做错了什么?
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您对 Promises 的使用不正确。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 });

    }


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号