Promise 似乎没有调用 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

};

似乎虽然控制台resolve called在multerUploadWorker其中记录并不会触发if (await multerUploadWorker(req, res, storage))条件。没有错误被抛出,只是没有任何反应。我在这里做错了什么?


慕标琳琳
浏览 223回答 1
1回答

慕沐林林

您对 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 });    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript