gpt4 book ai didi

express - 在快速服务器 app.get 中进行异步调用

转载 作者:行者123 更新时间:2023-12-05 00:48:50 24 4
gpt4 key购买 nike

我正在制作一个 Express 服务器,用于将 youtube 播放列表中的视频转换为 xml 播客提要。我的 app.get 返回一些生成的 xml:

app.get("/", function(req, res) {
res.set('Content-Type', 'text/xml');
return res.send(xml(myXmlContent, { declaration: true }));
})

我需要用一些数据填充 myXmlContent,包括 youtube 播放列表中的视频 ID。我可以使用 youtube API 来获取这些视频 ID,但它不是同步的。它在回调中返回 ID。

我如何才能等到我得到结果后再从 app.get 返回?我可能会以错误的方式解决这个问题,因为超时可能是一个问题。关于如何实现依赖异步调用的动态 xml 生成的任何建议?

最佳答案

How can I wait until I get the results back before returning from app.get?

您不会在 Javascript 中“等待”。相反,当您从其他 API 调用获得结果时,您会在回调中发送响应。这就是 node.js 中异步开发的工作原理。

How can I wait until I get the results back before returning from app.get?

你没有。您可以在发送响应之前从 app.get() 返回就好了。这并不意味着你已经完成了处理。 app.get()(以及 express 中间件)旨在让您可以使用异步操作来获取响应数据。您只需返回,然后稍后当您的异步操作完成并且您拥有所需的数据时,您就会发送响应。

I'm probably going about this the wrong way, as timeouts will probably be an issue.

这不是错误的方法。但是,如果您的外部 API 真的很慢,那么您可能不得不担心 Express 超时或浏览器超时。快速超时,您可以配置。浏览器超时并不容易处理。如果需要很长时间才能获得浏览器超时的结果,那么您可能需要重新考虑您是如何做事的,因为任何普通用户都会放弃页面请求或按钮按下,只要它需要很长时间浏览器超时。

在您获得数据后,有几个选项可用于发送数据。由于您没有显示您正在使用的外部 API 及其工作原理,因此我们不能非常具体。但一般来说,你会做这些事情:

  1. 您将 res.send() 放在其他 API 的异步完成回调中。
  2. 您将其他操作的结果通过管道传输到响应中。
  3. 您使用 Promise 在其他 API 上获得完成通知,并将 res.send() 放入 Promise 的 .then() 处理程序中。

举个例子:

const rp = require('request-promise');

app.get("/", function(req, res) {
rp(someURL).then(result => {
// do some processing of result into finalData
res.send(finalData);
}).catch(err => {
console.log(err);
res.sendStatus(501);
});
});

关于express - 在快速服务器 app.get 中进行异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48835394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com