【问题标题】:Confused By Asynchronous Mechanism in NodeJs对 NodeJs 中的异步机制感到困惑
【发布时间】:2020-10-23 00:07:52
【问题描述】:

我对 NodeJs 中的异步机制有点困惑。如您所见,我在下面有一个路由器类。我有两个端点,当我有一个对端点'/a'的请求时,响应需要大约 10 秒。在这 10 秒内,尽管我使用了异步代码,但我无法向端点“/b”发出请求。

const express = require('express');
const fetch = require("node-fetch");
const router = express.Router();

router.route('/a')
  .get(function (req, res) {

    fetch(url)
      .then(response => response.json())
      .then(data => {
        **SOME CODE BLOCKS, IT TAKES 10 Seconds.**
        res.send(data)
      }
      );


  });

router.route('/b')
  .get(function (req, res) {

    res.send("Hello");

  });

module.exports = router;

请有人解释一下这种行为。

谢谢。

【问题讨论】:

    标签: javascript node.js express asynchronous


    【解决方案1】:

    很遗憾,您没有提供需要 10 秒的代码,所以我们只能猜测。 如果您实际上在此块内进行了一些实际上需要花费时间的繁重计算,那么您就不走运了。 Node.js 和 JS 一般都是单线程的,所以无法实现在单个 JS VM 内同时执行多个操作。 您可以解决此问题,启动子进程并异步等待它完成。你可以从这个问题开始你的研究:How to have heavy processing operations done in node.js

    【讨论】:

      【解决方案2】:

      回调,就是.then()里面的函数

        .then(data => {
          **SOME CODE BLOCKS, IT TAKES 10 Seconds.**
          res.send(data)
        } 
      

      函数本身是同步的。例如,如果您有一个大循环,那么它将阻塞您的主线程。一个解决方案可能是使用工作线程。它们不在主线程上运行,因此不会阻塞。

      【讨论】:

      • .then() 函数是一种处理 Promise 的方式,直到一个 Promise 被解决,换句话说,就是将一个非阻塞的异步函数变成同步的形式。
      • @Mastermind 是的,但我在谈论 .then() 内部的函数,在这种情况下,带有参数 data 女巫的箭头函数是同步的,并在承诺解决后执行
      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多