jQuery로 배열이나, Collection 정보를 순차적으로 Ajax 비동기를 호출해서 처리해야 하는 상황에서 

(예시 : 첫번째 Ajax 비동기 호출이 완료 될 때까지, 기다렸다가 두번째 Ajax 비동기 호출을 해야하는 경우 )


Ajax 비동기 호출을 기다리기 위해서 async, await, promise를 사용하여 문제 해결을 진행했다.



단, 소스 코드를 실행 전에 사용하고 있는 브라우저가 async, await, promise 를 지원하는지 확인이 필요하다.


크롬도 마찬가지로 버전이 낮을 경우, 해당 소스코드를 문법 오류로 인식한다.



- 소스는 참조용입니다.

eachAjaxCall();


async function eachAjaxCall(){

  var array = [1,2,3];

  for ( const element of array ){

  try{

    await promiseAjaxCall(element);

      console.log('element done');

    }catch(e){

    console.log('called by reject');

    }

  }

   console.log('process done'); 

}



async function promiseAjaxCall(element){

return new Promise(function(resolve,reject){

$.ajax({

                 url: 'URL 주소 작성',

                 type: 'POST',

data : element,

    }).done(function(data) {

    /**

              * 

      */

      console.log('ajax done' + data);

      console.log(element);

      resolve();

    }).fail(function() {

    reject();

  });

  });

}





'프로그래밍 > jQuery' 카테고리의 다른 글

jQuery로 Value getter(),setter() 만들기  (0) 2019.03.16
[jQuery] scrollTop 을 이용한 textarea focus  (0) 2012.08.22
[jQuery] each()  (0) 2012.05.10
[jQuery] attr()  (0) 2012.04.25
[jQuery] jQuery.each() vs .each()  (1) 2012.04.24



Log4j에서 Async 방식을 이용하려면 Properties 파일이 아닌 XML 형식으로 작성하여야 한다.


XML 방식을 이용하여 원하는 Append를 Async 방식으로 사용할 수 있게 해준다.


<appender name="asyncAppender" class="org.apache.log4j.AsyncAppender">
 <param name="BufferSize" value="500"/>
 <param name="Blocking" value="true"/>
 <appender-ref ref="something"/>
</appender>


XML 내부 설정 사항을 살펴보면 버퍼 사이즈 지정과 Block을 설정할 수 있다.


코드에서 Log를 사용하게 되면 Log내용을 메모리에 보관하였다가, Async 스레드가 메모리의 내용을


Appender에 전달하게 된다. (AsyncThread는 Log4j에서 자동으로 생성되어 동작함)


logger.info("INFO")

logger.debug("DEBUG")

...

 

 Memory

 AsyncThread


Append(File, Rolling etc..)



이와 같은 방식으로 사용되면, 순간적으로 많은 로그 요청으로 인하여 지정한 메모리 용량보다 많은 내용을


담게 될 수도 있다.


(예시: 웹 서비스에서 로그인 시간을 로그로 남긴다고 가정 하였을때, 버퍼 사이즈보다 많은 동시 접속자가


로그인을 시도하게 된다면, 로그의 버퍼사이즈보다 많은 내용을 순간적으로 가지게 된다.)



이 때, Blocking 설정이 True라면 메모리의 데이터가 해소 될때까지 메모리 용량에 유입을 막게 되고


Blocking 설정이 False라면 메모리가 확보 될떄까지 로그 내용은 버려지게 된다.


Blocking을 설정하지 않을 경우, 기본적으로 TRUE로 설정된다.