为了账号安全,请及时绑定邮箱和手机立即绑定

node.js中await会造成内存泄漏?

node.js中await会造成内存泄漏?

慕哥6287543 2019-01-24 21:55:32
最小复现代码:test.jsfunction sleep(delay) {    return new Promise(resolve => setTimeout(resolve, delay)); }const _ = require('lodash');async function doTask() {    // console.log('start');     await sleep(_.random(10, 30));    // console.log('done');}async function start() {    await sleep(3);    await doTask();    await start(); // 去掉前面的await就好了} start(); setInterval(() => {    console.log(process.memoryUsage()); },10e3);进程启动的时候rss是22M,运行了1个多小时后内存占用达到了380M  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 30211 devel     20   0 1229m 381m  10m S  1.0  9.6   1:36.63 node test.js# 在start函数的递归调用中取消await21729 devel     20   0  867m  23m  10m S  1.0  0.6   1:22.73 node test.js# 改成循环14498 devel     20   0  867m  24m  10m S  1.0  0.6   1:11.04 node test.js虽然确定是在递归调用的时候前面多加了个await,但是能解释下原因么,是我使用的姿势不对么
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

下一次start调用的时候,前一次的promise对象并没有销毁,所以每次都会产生一个新的promise对象,内存可不就泄露了吗

查看完整回答
反对 回复 2019-01-24
  • 1 回答
  • 0 关注
  • 687 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信