我有一些函数可以对数据和数组进行大量计算,但是所有函数都在内存中,它不会执行任何IO。我一直在阅读尝试进入nodejs,我想知道是否有任何好处,然后进行异步?例如,函数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);
}
}
在这种情况下使用promises是否有任何改进,或者我只是过于复杂,应该只返回值而不是承诺?
答案 0 :(得分:2)
不,异步函数只是承诺之上的语法糖。如果你的函数实际上没有任何异步操作(比如网络请求),它将继续同步执行并同步解析,因此它与普通函数没有区别。
Javascript是单线程的。
答案 1 :(得分:1)
你可以在“批次”中执行lot of operations with arrays
以避免“阻止”其他执行 - 以下是“伪”代码,因为你没有显示// a lot of operations with arrays
实际上是什么......所以
function a(b, c, d) {
return new Promise((resolve, reject) => {
function processBatch() {
// do some operations with arrays
if (error) {
reject(error);
} else if (needToProcessMore) {
setImmediate(processBatch);
} else {
resolve(someResult);
}
}
setImmediate(processBatch);
});
}
或者,(虽然我自己从未使用过它们)有节点可用的“线程”和“线程工作者”类型库