【发布时间】:2018-09-04 00:56:27
【问题描述】:
我有一些函数可以对数据和数组进行大量计算,但都在内存中,它不做任何 IO。我一直在阅读尝试进入 nodejs,我想知道进行 then 异步是否有任何好处?比如函数a:
function a(b, c, d) {
// a lot of operations with arrays
return value;
}
如果不涉及任何 IO 阻塞操作,在这种情况下返回 Promise 是否有意义?例如:
function a(b, c, d) {
return new Promise(resolve, reject) {
// a lot of operations with arrays
resolve(value);
}
}
在这种情况下使用 Promise 是否有任何改进,或者我只是过于复杂了,应该只返回值而不是 Promise?
【问题讨论】:
-
传递给 Promise 构造函数的执行器是同步执行的 - 所以,没有任何好处(不过,奇怪的是,我看到一些代码运行速度快了 10 倍 - 至少在 Firefox 中,所以我猜不是那么相关- 在执行器内部) - 注意:您发布的 Promise 代码无效
-
也许这个帖子可以帮到你:stackoverflow.com/questions/43482775/…
-
话虽如此,您可以为
// a lot of operations with arrays编写代码,使其不会“阻塞” - 即通过在受控中执行小批量操作,使其成为伪异步setTimeout/setImmediate/任何可用的序列 - 在这种情况下,Promise 可能是有益的。这实际上取决于“操作”是什么,以及为什么您希望它们“非阻塞”-(这是某种服务器的一部分,并且在执行密集计算时它停止响应客户端请求?) -
@JaromandaX 是的,在给出响应之前它们是服务器进程的一部分,此时我没有遇到任何性能问题,但我担心在某个时候有更多请求我会开始有问题。
-
查看我的答案 - 显然我无法帮助您“拆分”并执行“数组上的一些操作”,因为您没有显示有关“数组的大量操作”的任何细节" - 但希望这能让您了解可以做什么
标签: javascript node.js promise async-await es6-promise