2013-05-09 3 views
0

두 함수는 비동기식입니다. 함수가 완료되면 콜백되는 매개 변수로 함수를 받아들입니다 (콜백).제어 흐름 : 비동기 배열 맵 두 개를 실행하십시오.

function a(item, cb) { 
    someAsyncOperation(function() { 
    cb(item) 
    }) 
} 

function b(item, cb) { 
    someAsyncOperation(function() { 
    cb(item) 
    }) 
} 

나는 배열을 가지고 있습니다. 이 배열에서 두 번 Array.prototype.map을 사용하여 이러한 함수를 실행해야합니다. 두 맵이 완료되면 오류 및 매핑 된 배열이라는 두 개의 매개 변수로 호출되는 콜백을 갖고 싶습니다.

이것을 달성하기 위해 어떤 종류의 제어 흐름이 필요합니까? 무언가가 async library 나는 추측하고있다. 의사 틱 코드에서

는 :

var example = [1, 2, 3] 

async.series([ 
    function() { example.map(a) }, 
    function() { example.map(b) } 
], function (error, mappedExample) { 

}) 

답변

0

당신은 확실히 이런 종류의 비동기 라이브러리를 사용할 수 있지만,이 경우, 당신은 단순히 함께 귀하의 기능을 체인에 의해 스스로를 처리 할 수 ​​

var items = ["a", "b", "c", "d" ], 
    foo = function (array, cb) { 
     "use strict"; 
     array = array.map(function (element) { 
      return "foo-" + element; 
     }); 

     cb(array); 
    }, 
    baz = function (array) { 
     "use strict"; 
     array = array.map(function (element) { 
      return "baz-" + element; 
     }); 

     console.log(array); 
    }; 

foo(items, baz); 

결과 :

[ 'baz-foo-a', 'baz-foo-b', 'baz-foo-c', 'baz-foo-d' ] 

함수가 특히 복잡하거나 이런 일을 자주하면 비동기가 도움이 될 수 있습니다. 그러나, 당신 스스로 그것을 할 수없는 이유는 없습니다. (당신은 물론 오류 처리를 추가 할 필요가)

1

예는 async 라이브러리를 사용합니다. 이런 종류의 일을하는 것은 대단합니다.

하나의지도를 작성한 다음 결과를 다음 함수로 전달해야하는 경우 async.waterfall을 봐야합니다.

+0

내 예제는 두 매핑을 모두 포함하는 콜백 개체를 끝날 것이다. 그러나 나는 그 두 가지를 합쳐야 할 것이다. 나는 더 좋은 방법이있을 거라고 생각 했어? 아마도 async가 하나의 매핑을 수행 할 수 있고 거기에 매핑하기 위해 결과를 다음 함수로 전달할 수 있습니까? –

+0

당신은 async.waterfall을 사용할 수 있습니다. 나는 나의 대답을 업데이트했다. – Daniel