重任务不阻塞nodejs
Heavy task not blocking nodejs
我必须循环一个数组,并在几个函数中为每个元素计算一个非常繁重的任务,但我需要在 return 回调之前完成整个数组。问题是节点没有阻塞在那里,就像对待异步代码块一样,因为在它完成之前,回调是 returned。我错过了什么?
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;
}
callback(result) 被立即调用,我需要它被阻止以便处理数组。这已经转移到子进程,所以它假装那样工作。
'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
。
我必须循环一个数组,并在几个函数中为每个元素计算一个非常繁重的任务,但我需要在 return 回调之前完成整个数组。问题是节点没有阻塞在那里,就像对待异步代码块一样,因为在它完成之前,回调是 returned。我错过了什么?
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;
}
callback(result) 被立即调用,我需要它被阻止以便处理数组。这已经转移到子进程,所以它假装那样工作。
'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
。