繁重的任务没有阻塞nodejs

时间:2016-01-12 02:11:34

标签: node.js callback blocking

我必须循环一个数组,并在几个函数中计算每个元素一个非常繁重的任务,但我需要在返回回调之前完成整个数组。问题是,节点没有阻塞,就像处理这个代码块一样异步,因为在它完成之前,返回了回调。我错过了什么?

function one(data, callback){
    for(var i=0; i < data.length; i++){
        result = two(data[i]);
    }
    callback(result)
}

function two(data){
        //process
        return three(data);
}

function three(data){
    //heavy task
    return data;
}

立即调用回调(result),我需要阻止它才能处理数组。这已经转移到了子进程,因此它假装以这种方式工作。

1 个答案:

答案 0 :(得分:0)

'use strict';
function makePromise(data) {
    return Promise(resolve, reject) {

        //here handle data
        if ( // success ) {
            resolve(result);
        } else {
            reject(error);
        }
    };
}

data.map((element) => makePromise(element))
    .all(restuts => {
        //here results is a array
    })
    .catch(error => {
        console.log(error);
    })

您可以在ES6中使用Promise