2013-12-12 3 views
1

비동기 및 두 개의 배열에 문제가 있습니다.node.js async for each array

나는 두 배열

var arrayOne = new Array(); 
var arrayTwo = new Array(); 

내가 현재 폭포 내부에 다음과 같은 비동기 스타일을 수행하는 방법을 알아 내려고 노력하고 있습니다

... // some code 
function (arrayOne, arrayTwo, callback) { 
    // do stuff 
    for(var i = 0; arrayOne.length > i; i++) { 
     // do more stuff 
     callback(e, arrayOne[i], arrayTwo[i]); 
    } 
}, 
function (valueOne, valueTwo, callback) { 
... // more code 

내가 async.foreach를 사용하여 시도 만 만/

에르고 :

... // some code 
function (arrayOne, arrayTwo, callback) { 
    // do stuff 
    forEach(arrayOne, function(valueOne, callback) { 
     // do more stuff 
    }, function(e){ 
     // do more stuff 
     callback(e, valueOne, /* valueTwo???? */); 
    }); 
}, 
function (valueOne, valueTwo, callback) { 
... // more code 
하나 개의 어레이 시만

답변

0

당신이 그것을 지나친 것 같아 :

function (arrayOne, arrayTwo, callback) { 
    forEach(arrayOne, callback, function(){ 
     forEach(arrayTwo, callback); 
    }); 
}; 
+0

을 사용하여 가장 짧은 배열의 길이에 걸쳐 루프 예제에서 각 배열의 요소를 사용하여'callback'을 호출합니다. –

2
2 개 배열

// async.map은 다음과 같이해야한다 :

function map(a, b, func, cb) { 
    var results = []; 
    var length = Math.min(a.length, b.length); 
    var countdown = length; // count to 0 

    for(var i=0; i < length; i++) { 
     func(a[i], b[i], function (err, result) { 
      results.push(result); 
      countdown--; 
      if(countdown === 0) { 
       cb(null, results) // cb is call on last result 
      } 
     }) 
    } 
} 

// 테스트

var a = [1,1,1]; 
var b = [2,2,2]; 

function sum(a, b, cb) { 
    // simulate async with timeout 
    setTimeout(function() { 
     cb(null, a + b); 
    }, 1000); 
} 

map(a, b, sum, function (err, results) { 
    console.log(results); 
}) 

OUPUT :

[ 3, 3, 3 ] 
3

async.times :

function task(a, b, next) { 
    setTimeout(function() { 
     next(null, a + b); 
    }, 1000); 
} 

function work(a, b, done) { 
    async.times(Math.min(a.length, b.length), function(i, next) { 
     task(a[i], b[i], next); 
    }, done); 
} 

var a = [1, 1, 1, 1]; 
var b = [1, 1, 1]; 

work(a, b, function(err, result) { 
    console.log('result:', result); 
}); 

console.log('continuing...');