【发布时间】:2021-10-16 13:25:19
【问题描述】:
我想创建一个端点来下载视频并将此视频上传到 Youtube。
首先我从请求正文中获取视频网址。 其次,我将此视频保存到临时文件夹。 之后我将此视频上传到 YouTube 频道 最后一步是删除临时视频。
所以我的代码是这样剪断的:
const videoUrl = req.body.video_url;
....
....
var download = async function (url: any, dest: any, cb: any) {
var file = fs.createWriteStream(dest);
var request = https.get(url, function (response: any) {
response.pipe(file);
file.on('finish', function () {
file.close(cb);
});
}).on('error', function (err: any) {
fs.unlink(dest);
if (cb) cb(err.message);
});
};
const video = await download(videoUrl, file, function () {
console.log('Video Download Successfull'); ===============> 3rd console output
});
....
....
var readStream = await fs.createReadStream(file);
readStream.on('error', function (err: any) {
});
var request: any = await Youtube.videos.insert({
resource: {
snippet: {
title: title
, description: description
}
, status: {
privacyStatus: "private"
}
}
, part: "snippet,status"
, media: {
body: readStream
}
}, (err: any, data: any) => {
if (err) {
console.log(err.response.data.error)
res.status(500).json({
status: "Fail",
message: "Youtube Video Upload Failed"
})
}
else {
try {
fs.unlinkSync(file)
console.log("temp video file deleted from server"); ===============> 1st console output
} catch (err) {
console.log("temp video file not deleted")
console.error(err)
}
res.status(200).json({
status: "Success",
message: "Youtube Video Upload Successfull"
})
console.log("Video upload to youtube Successfull."); ===============> 2nd console output
}
});
当我调用这个端点时,控制台输出如下:
temp video file deleted from server
Video upload to youtube Successfull.
Video Download Successfull
但是控制台输出应该是:
Video Download Successfull
Video upload to youtube Successfull.
temp video file deleted from server
为什么我的流程不正确。我该如何解决这个问题?
【问题讨论】:
-
异步函数不应该接受回调参数,它应该返回一个承诺。否则
await将不起作用。
标签: javascript node.js typescript express async-await