最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

为什么在wait.end()之后不运行此等待功能?

运维笔记admin13浏览0评论

为什么在wait.end()之后不运行此等待功能?

为什么在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

发布评论

评论列表(0)

  1. 暂无评论