异步函数是否仅用于IO阻塞操作?

时间:2018-03-25 23:19:31

标签: javascript node.js promise async-await es6-promise

我有一些函数可以对数据和数组进行大量计算,但是所有函数都在内存中,它不会执行任何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是否有任何改进,或者我只是过于复杂,应该只返回值而不是承诺?

2 个答案:

答案 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);
    });
}

或者,(虽然我自己从未使用过它们)有节点可用的“线程”和“线程工作者”类型库