상세 컨텐츠

본문 제목

asyncMap method for array of multiple functions - Javascript

Programming/Algorithm

by 쌩우 2019. 6. 28. 22:47

본문

asyncMap은 두 개의 인자를 가진다.
첫째는 비동기 함수들이 담긴 배열이고,
둘째는 callback 함수이다.

배열에 있는 각각의 함수는 별개의 callback을 가지고 있으며,
마지막 함수까지 실행되고 나면, 그 때 두번째 인자로 받은 callback을 invoke한다.

주의사항

결과값으로 return되는 배열은 첫번째 인자로 받았던 함수들의 결과값을 차례대로 가지고 있어야 한다.
비록 그 함수들이 비동기로 작동하였을지라도!

Example

asyncMap([
 function(cb){
     setTimeout(function(){
     cb('one');
 }, 200);
 },
     function(cb){
     setTimeout(function(){
     cb('two');
     }, 100);
     }
 ],
 function(results){
 // the results array will equal ['one','two'] even though
 // the second function had a shorter timeout.
 console.log(results); // ['one', 'two']
 });

비동기 함수의 동기적 처리 (callback way or Promise)

비동기적으로 작동하는 함수를 동기적으로 처리하도록 하고 싶을 때에는,
해당 함수 내에 callback 함수를 넣거나,
비동기 함수를 Promise 형태로 만들어서 이용하면 가능해진다.

//promise way
var asyncMap = async function(tasks, callback){
    let result = [];
    for (let i = 0; i < tasks.length; i++) {
        result.push(
        await new Promise(resolve => {
            tasks[i](resolve);      //tasks[i] function의 arguments가 resolve의 arguments로 담겨서 실행됨. await으로 pending 풀어줌.
        })
        );
    }
  return callback(result);
};

//callback way
 var asyncMap = function(tasks, callback){
     //In tasks, many functions are waiting for being called
     //callback muse be called at last task
    //each task gets arguments and implement it asynchronously
    //args are numbers in test cases(e.g. 1,2,3,4,5) 
    //should store args in output array, so we 
    //must have callback in callback function
     let output = [];
     let count = 0
     for(let i = 0; i < tasks.length; i++) {
        tasks[i](function(args) {
            output[i] = args
             count++
             console.log('i', i)
             console.log('count', count)
             if(count === tasks.length) {
               callback(output)
            }
        })
     }
 }

'Programming > Algorithm' 카테고리의 다른 글

로마 숫자 변환 - Javascript  (0) 2019.07.13
shuffleDeck (카드섞기) - Javascript  (0) 2019.07.10
balanced parentheses - Javascript  (1) 2019.06.27
BreadthFirstSearch in Tree - Javascript  (0) 2019.06.21
powerSet - recursion  (0) 2019.06.20

관련글 더보기

댓글 영역