res.send is not waiting for my async function to finish before sending the response to the front end on my Express server app(在将响应发送到Express服务器应用程序的前端之前,res.send不会等待异步函数完成)
本文介绍了在将响应发送到Express服务器应用程序的前端之前,res.send不会等待异步函数完成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建完整的堆栈应用程序,允许用户输入URL并使用Puppeteer捕获屏幕截图。在我的后端Express服务器上,我使用app.post将响应发送到前端,前端创建用于下载的图像。
这是我的后端:
app.post('/api/screenshot', (req, res) => {
const { url } = req.body
let screenshot = takeScreenshot(url)
res.send({ result: screenshot })
// next()
})
async function takeScreenshot(url) {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle0' });
const screenshot = await page.screenshot()
await browser.close();
return screenshot;
}
我的前端JS有一个ss-BTN的事件侦听器。当它被点击时,它会触发对后端的POST请求,后端运行TakeScreenshot函数。然后生成下载链接
$("#ss-btn").on("click", function (event) {
event.preventDefault();
var url = $("#url").val().trim();
$.post("/api/screenshot", { url: url })
.then(res => {
const { result } = res
const blob = new Blob([result], { type: 'image/png' })
const link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = `your-file-name.png`
link.click()
})
});
现在,当我单击ss-BTN时,会立即弹出窗口,询问我要将图像保存到哪里。但看起来截图并没有被发回前端。PNG文件已损坏,我无法打开它。
TIA
推荐答案
尝试使用异步/等待函数逐个执行代码,如下所示:
(async() => {
let screenshot = await takeScreenshot(url)
res.send({ result: screenshot })
})();
await
函数将执行您的代码,等待其完全完成并返回最终值,然后它将执行async
函数内的下一个命令。
这篇关于在将响应发送到Express服务器应用程序的前端之前,res.send不会等待异步函数完成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在将响应发送到Express服务器应用程序的前端之前,res.send不会等待异步函数完成


猜你喜欢
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 400或500级别的HTTP响应 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01