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