2016-08-10 4 views
2

자바 스크립트에는 3 가지 기능이 있습니다. function1은 array-array_message에 데이터를 삽입하고 function2는 'array_message'를 csv 파일로 내 보냅니다. function3은 목록의 모든 요소를 ​​사용하여이 두 함수를 호출합니다.Javascript 루프의 콜백 함수

자바에서는 function1이 function1과 동시에 실행되기 때문에 'array_message'를 채울 시간이 없으므로 내 보낸 파일은 항상 비어있게됩니다.

function1이 'for'루프에서 완료 될 때 아무도 function2를 호출하는 방법을 도울 수 있습니까? 다른 콜백 함수일까요?

function function3(){ 
     for (var i=0; i<list.length;i++){ 
     console.log(list[i]); 
     function1(list[i]) 
     function2(list[i]+'.csv',array_message) 
     } 
    } 
+0

잘못된 접근 방식을. 당신의 모든 문제가 당신의 문제의 근원 인 지구본을 얻고 사용하는 데 어려움을 겪고있는 것 같습니다. 당신은 그것들을 순수하게 할 수 있습니다. 순수한 함수는 입력을 받아 출력을 생성하고 부작용이 없으므로'function1'은'list [i]'항목을 받아 들여서 나중에'function2'가 소비하는'array_message' 객체를 생성해야합니다. 그래서 그것들을 연결할 수 있습니다 더 쉽게. – vlaz

답변

2

당신은 Promises (보다 더 낫다 IMO) 또는 콜백이 이러한 목표를 달성하기 위해 활용할 수 :

function function1(item) { 
    return new Promise(function(resolve, reject) { 
     // do operations 
     if (operationSuccessful) { 
      resolve(dataFromOperation); 
     } else { 
      reject(errorFromOperation); 
     } 
    }); 
} 

function function3() { 
    for (var i=0; i<list.length;i++) { 
     // only call function2 after function1 is complete 
     function1(item[i]).then(function(responseData) { 
      function2(responseData); 
     }).catch(function(error) { 
      console.error("Problem in function1") 
     }); 
    } 
}