【发布时间】:2017-07-11 14:19:33
【问题描述】:
我正在使用 Node.js 构建服务器端 RESTApi。当我自己测试时,Node 工作正常。但是当它真的在那里时,它仍然可能面临溢出问题。当请求很多的时候,比如说有5个以上的child_process(spawn)同时工作,每个进程都需要更长的时间,基本上都会减慢速度。
我的想法是检查当前进程是否低于某个限制(例如,一次限制为 3 个进程),如果超过限制,我将请求保存到一个数组中,并且每当当前进程低于限制,我使用 .shift() 弹出数组中最旧的一个并处理它。
但是,当涉及到 Promise 时,它变得很困难,因为我不知道我们是否可以将 Promise 存储到一个数组中,或者我是否应该简单地让进程暂停几秒钟,我认为它不是好主意。
如果你想持有一个承诺并在未来将承诺返回给客户,通常的方式是什么?
对不起,如果我没有说清楚。下面总结一下我的疑惑: 1. 我们可以保存一个承诺以备将来使用吗? 2. 我们是否将它们保存在数组中? 3. 我应该使用其他方法来保持承诺,例如使用 sleep() 还是简单地使用 while 循环来等待这个过程继续进行?
谢谢!
【问题讨论】:
-
Promise 本质上已经是一个代表未来价值的结构。在它创建后的任何时候,当您在其上调用
then(cb)时,它都会为您提供价值。 -
如果我使用 loadash 会有帮助吗?
-
您是否考虑过在您的流程中使用
promise-queue包? -
是的,承诺一个可以像其他任何东西一样传递的普通值。
-
听起来您需要更强大的服务器,或者找到并修复性能瓶颈。仅仅排队请求通常不会有帮助——这些队列最终也会溢出。管理它们需要额外的处理能力和内存,因此您通常最好尽快为它们提供服务。
标签: javascript node.js promise