如何控制节点中语句的执行流程

时间:2018-11-13 01:25:49

标签: node.js

在此程序中,在完成uploadPostHandler()中的所有语句执行之后,将执行postUpload()中的语句uploader = req.body.uploader; location = 'assets/posts/' + req.file.filename; console.log(uploader+" 1 "+location);,我不知道为什么?

async uploadpostHandler(req, res) {
    const postStorage = multer.diskStorage({
        destination: (req,file,cb) => {
            cb(null,POSTS);
        },
        filename: (req,file,cb) => {
            cb(null, Date.now()+path.extname(file.originalname));
        }
    });
    const postUpload = multer({storage: postStorage}).single('post');
    let post = {
        type: 0,
        noOflikes: 0,
        noOfcomments: 0,
        likedBy: [],
        comments: [],
        shares: 0 
    };
    var uploader = "";
    var location = "";
   postUpload(req,res,(err) => {
        //console.log(req.file);
        //console.log(req.body);
        if(err) {
            res.status(501).json({
                error: true,
                message: 'Internal Server Error1'
            });
            console.log(err);
        }
        uploader = req.body.uploader;
        location = 'assets/posts/' + req.file.filename;
        console.log(uploader+"  1  "+location);
    });
    try{
        post.uploader = await uploader;
        post.location = await location;
        console.log(post.uploader+"  2  "+post.location);
        const result = await PostQueryHandler.savePost(post);
        if(result == null || result == undefined || result == "") {
            res.status(501).json({
                error: true,
                message: 'DataBase Error'
            });
        }
        else{
            res.status(201).json({
                error: false,
                message: 'SuccessFully Uploaded'
            });
        }
    } catch(err) {
        res.status(501).json({
            error: true,
            message: 'Internal Server Error2'
        });
        console.log(err);
    }
}

1 个答案:

答案 0 :(得分:0)

您要传递给postUpload(即postUpload(<stuff in here>))的一个参数是在以后的某个时间点调用的函数。执行流程从postUpload行直接跳到post.uploader = await uploader;行。我不知道multer的作用,但是它将在有结果(即异步)时调用您的回调函数,这就是为什么在原始问题中提到的那行最后被称为-他们是最后一个回调的各行,在其余代码执行后调用。

相关问题