Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 已创建活动句柄,但即使在简单节点JS应用程序中也未销毁_Node.js - Fatal编程技术网

Node.js 已创建活动句柄,但即使在简单节点JS应用程序中也未销毁

Node.js 已创建活动句柄,但即使在简单节点JS应用程序中也未销毁,node.js,Node.js,我正在使用Node10.10.0的最新版本,下面是我试图执行的代码的小部分 var fs = require('fs'); const express = require('express'); const request = require('request'); const app = express(); async function fun1(req, resp){ let response = await request.get('http://google.com');

我正在使用Node10.10.0的最新版本,下面是我试图执行的代码的小部分

var fs = require('fs');
const express = require('express');
const request = require('request');
const app = express();


async function fun1(req, resp){
    let response = await request.get('http://google.com');
      if (response.err) { console.log('error');}
      else { resp.send('fetched response'); };
  }

app.get('/', (req, res) => {
    fun1(req, res);
});

app.listen(3000, () => {
    console.log('Example app listening on port 3000!');
});
我还使用了诊所医生

我正在运行下面的命令

clinic doctor --on-port 'autocannon -c100 localhost:3000' -- node index.js
在执行上述命令时,我得到以下控制台输出

Example app listening on port 3000!
Running 10s test @ http://localhost:3000
100 connections

Stat         Avg    Stdev   Max
Latency (ms) 94.72  75.87   1077.87
Req/Sec      827    257.35  1248
Bytes/Sec    180 kB 55.7 kB 270 kB

9k requests in 11s, 1.96 MB read
9 errors (0 timeouts)
Analysing data
Generated HTML file is 3884.clinic-doctor.html
You can use this command to upload it:
clinic upload 3884.clinic-doctor
我还生成了一个漂亮的UI,它会自动打开,如下所示

问题
为什么我的应用程序在测试性能瓶颈时会继续创建活动句柄,如图中第4个图表所示?我需要关闭任何东西吗?我忘了什么吗?

首先,非常感谢我寻找Node.js压力测试工具的这个例子

您的示例设置不正确,
请求
不适用于承诺。有一些人与蓝知更鸟或当地人合作

我使用
async/await
调整了您的示例:

const express = require('express');
const request = require('request-promise-native');
const app = express();


function fun1(req, resp) {
  return request.get('http://google.com');
}

app.get('/', async (req, res) => {
  try {
    await fun1();
    res.send('fetched response');
  } catch (error) {
    res.send('error')
  }
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});
结果:


请记住,您还必须优雅地关闭任何挂起的服务器实例,如图所示。

您的代码没有考虑自动加载请求。它以错误告终。当你运行上述代码时,你能发布你的控制台输出吗?@AnkurSoni我使用了与你提供的完全相同的命令。是的,但是你看到控制台了吗?它在超时请求时出错。请检查。您也应安装
请求
<代码>npm i--保存请求