【问题标题】:How to handle two long request simultanously in expressJS如何在 express JS 中同时处理两个长请求
【发布时间】:2022-01-11 14:26:59
【问题描述】:

我有一个 API 与 express one route 花一些时间来获取所需的所有数据(通过长 JSON 对象搜索)

router.get(
  "/:server/:maxCraftPrice/:minBenef/:from/:to",
  checkJwt,
  async (req, res) => {
    const getAllAstuces = new Promise(async (resolve, reject) => {
      const { EQUIPMENTS_DIR, RESOURCES_DIR } = paths[req.params.server];
      const astuces = [];
      const { from, to, maxCraftPrice, minBenef } = req.params;
      const filteredEquipments = getItemByLevel(from, to);
      for (const equipment in filteredEquipments) {
        // parsing and push to astuces array
      }
      resolve(astuces);
    });

    const resource = await getAllAstuces;
    return res.json(resource);
  }
);

现在在我的网站上,当有人访问与此路由关联的页面时,正在加载数据时,所有其他请求都像在队列中一样被锁定

我尝试添加 Promise 来处理这个问题,但没有改变

有没有办法同时处理请求,或者我应该重构该路由以使其更快?

【问题讨论】:

  • 你需要检查你点击 API 的前端代码,你可能是先调用慢 API,然后等待它完成,然后调用下一个 API 等,如果它们不依赖在第一个 API 调用结果上,然后不要对 API 使用 await,而是在慢速 API Promise 上使用 .then(callbackFunction) 并照常调用其余 API。

标签: node.js express asynchronous queue


【解决方案1】:

如果您的请求需要很长时间来处理,它将阻止所有其他请求,直到它完成。如果您可以使请求花费更少的处理时间,这是一个很好的起点,但您可能需要采取进一步的步骤来更快地处理多个请求。

有多种方法可以解决这种情况。这个article describes a few approaches

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 2020-04-18
    • 2022-01-20
    • 2021-04-12
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多