为什么在wait.end()之后不运行此等待功能?
在这个简单的Node函数中,为什么await
函数没有运行?我想早点res.end
运行该功能的其余部分,但它会停在await
功能上。
const fs = require("fs")
const bent = require("bent")
const buffer = bent("buffer")
const file_url = ".png"
module.exports = async (req, res) => {
console.log("REQUEST RECEIVED")
res.end("JOB ACCEPTED")
console.log("STARTING JOB")
console.log("BUT NOTHING AFTER THIS RUNS")
fs.writeFileSync("/tmp/mask.png", await buffer(file_url))
console.log("FILE DOWNLOADED")
// do more stuff with the downloaded file..
}
当我调用此函数时,永远不会下载文件,并且FILE DOWNLOADED日志行也不会运行。日志:
REQUEST RECEIVED
STARTING JOB
BUT NOTHING AFTER THIS RUNS
如果将fs.writeFileSync
更改为常规fs.writeFile
并使用回调,一切将按预期工作:
const fs = require("fs")
const bent = require("bent")
const buffer = bent("buffer")
const file_url = ".png"
module.exports = async (req, res) => {
console.log("REQUEST RECEIVED")
res.end("JOB ACCEPTED")
console.log("STARTING JOB")
console.log("BUT NOTHING AFTER THIS RUNS")
// fs.writeFileSync("/tmp/mask.png", await buffer(file_url))
fs.writeFile("/tmp/mask.png", buffer(file_url), () => {
console.log("FILE DOWNLOADED")
})
console.log("FILE DOWNLOADED")
// do more stuff with the downloaded file..
}
现在文件已下载,并且FILE DOWNLOADED行都记录到控制台。但是我喜欢sync方法,因为它避免了回调汤。
所以我的问题是,为什么在res.end之后不能运行await函数?
回答如下:您是否尝试过不像在fs.writeFileSync
中那样等待缓冲区功能就执行fs.writeFile
?