SetTextFile 실행순서 문의드립니다. (for문)

기존에 HwpCtrl로 작업했던 소스를 웹한글기안기로 바꾸는 작업중
궁금한 점이 있어 문의드립니다.

먼저 기존 소스중 일부입니다.

아래와 같이 바이너리 형태로 저장된 한글내용을 여러개 불러와서

<c:if test=“${not empty hwp_list}”>
<c:forEach items=“${hwp_list}” var=“hwp_list”>
<c:if test=“${not empty hwp_list}”>

</c:if>
</c:forEach>
</c:if>

아래와 같이 순서대로 새 문서에 붙이는 형태로 작업했던 소스가 있었습니다.

$(‘input[name=hwp_list]’).each(function(i){
if(i != 0){
hwpCtrl.Run(‘BreakPage’);
}
hwpCtrl.SetTextFile($(this).val(), ‘HWP’, ‘insertfile’);
hwpCtrl.Run(‘MoveDocEnd’);
});

위 소스를 웹한글기안기로 바꾸다보니
SetTextFile 함수가 비동기방식으로 변경되었다고해서 아래와 같이 바꿔봤는데

$(‘input[name=hwp_list]’).each(function(i){
hwpCtrl.SetTextFile($(this).val(), ‘HWP’, ‘insertfile’, function(){
hwpCtrl.Run(‘MoveDocEnd’);
if(i != 0){
hwpCtrl.Run(‘BreakPage’);
}
});
});

문서 순서가 의도한대로 안만들어지고 섞이는 경우가 생기네요.
기존에는 무조건 1,2,3… 순서로 붙었다면
지금은 1,2,3,4,5 순서로 될 때도 있고 1,3,4,5,2 순서로 붙을 때도 있습니다.

포럼 검색해보니 for문 대신 callback 함수를 통해 순차적으로 동작하도록 구현하라고 안내하셨는데

개수가 정해지지않은 여러개의 한글문서를 (바이너리 형태)
순서대로 하나의 문서에 붙이려면 어떻게 처리해야하는지 방법 안내해주시면 감사하겠습니다.
SetTextFile 말고 다른 방법이 있으면 알려주셔도 됩니다.

감사합니다.

2개의 좋아요

안녕하세요.

for 문을 사용하게 되면 비동기로 동작이 어렵기 때문에 다른 방식으로 개발을 해야 할것 같습니다.

아래와 같이 재귀호출 방식으로 하면 될것 같습니다.

var hwplist = xxxxxx;

var insertHwp = function(data, cur, max, callback) {
    HwpCtrl.SetTextFile(data, 'HWP', 'insertfile', function() {
        if (cur < max) {
            HwpCtrl.Run('MoveDocEnd');
            HwpCtrl.Run('BreakPage');
            callback(hwplist[cur+1].value, cur+1, max, callback);
        }
   });
}


insertHwp(hwplist[0].value, 0, hwplist.length, insertHwp);

2개의 좋아요

다른 방법으로 구현하고 있었는데,
올려주신 방법이 더 심플한 것 같습니다.
감사합니다!

2개의 좋아요