映射大型数组阻塞了我的nodejs线程

时间:2018-08-30 04:15:18

标签: node.js

我正在尝试映射一个大型数组(大约11k项)。实际的映射功能非常简单,但是数组中的项目数量太多,会阻塞所有内容。 避免这种情况的最佳方法是什么?我尝试使用异步映射,但遇到了同样的问题。

2 个答案:

答案 0 :(得分:1)

您可以使用Promise或setTimeout将同步(映射)操作更改为异步操作。递归函数可用于逐步处理大型数组中的项。

例如:

const largeArrays = [];
const resultArrays = [];

function process(source, target, index) {
    if (index === target.length) {
        // Now the result Arrays should have all processed data
        return
    }

    // Dummy map action here for example, please change to your own one
    target.push(source[index] + 1);
    setTimeout(() => { process(source, target, index + 1) }, 0);
}

process(largeArrays, resultArrays, 0)

您可以将代码包装到Promise中并解决它,而不用使用上面的return语句。

您不需要任何精美的库,只需本机javascript函数即可。您可以查看我的两个博客,这些博客说明了这类问题的想法。
How to avoid Stack overflow error on recursion
How to make long running loop breakable?

答案 1 :(得分:0)

我没有尝试过,但是使用了一个处理映射部分的异步函数,然后在每次迭代中使用必要的信息(索引,数组项等)调用该函数会不会有帮助?