node.js - 我应该异步将数据保存到数据库吗

标签 node.js express asynchronous

我正在使用 Node Express 和 Postgress。 我不确定我想做的是一个好的做法还是一个很大的错误。 当我已经向客户端返回结果后,将数据异步保存到数据库。

我尝试用 console.log 来演示它,以检查我的服务器在保存过程中是否会被阻止。

在这里您可以看到 status 路由和 statusB 路由。

  app.get("/statusB", async (req, res) => {
    return res.status(200).send("testAAA");
  });

  app.get("/status", async (req, res) => {
    const userStats = await UserController.getData("id")
    const x = test();

    return res.status(200).send(userStats);
  });

  async function test() {
    return new Promise(() => { 
      for (let x = 0; x < 10000; x++) {

        setTimeout( () => {
          console.log(x)
        }, 5000);
      }
    })
  }

我想要发生的情况是,如果我发送 /status 并在发送 statusB 之后立即发送。

我希望输出是:
/status 将返回 userStats 数据
/StatusB 返回“testAAA”
并且计数器将异步运行。


但实际输出是:
- /status 返回 userStats 数据
- 反跑
- /StatusB 仅在计数器完成后返回“testAAA”

控制台日志只是测试我是否可以异步获取数据并将其保存到数据库,而不是控制台日志。

最佳答案

取决于您的业务案例。

如果您的客户可以获取 200 OK 状态代码,即使保存实际上可能失败,那么当然,您可以在响应后异步执行此操作。

在其他情况下,您需要在请求中进行保存,并且只有在确定一切都安全无误后才做出响应。

关于node.js - 我应该异步将数据保存到数据库吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56683993/

相关文章:

node.js - 在命令行中运行 Node ,无需 sudo

node.js - 为什么我的 jwt token 在背面而不是正面返回 null

node.js - nodejs Sequelize orm model.validation 不是函数

javascript - 如何扩展 GraphQL 调用的上下文对象?

jquery - jquery的$.get是异步的吗?

html - 是否应该监控页面上加载的 html 元素的数量?

node.js - MongoDB:正确保存数据以建模

node.js - 如何从 Promise Sequelize 返回值

angular - 在 express 和 angular 之间共享接口(interface) interface/model 文件

c# - async/await 的调用链...等待可等待的还是返回可等待的?