await Ctr.Insert(url 파일, “HWP” function() {}, null);
대충 이런식으로 for loop를 돌리고 있습니다.
파일이 URL이 최소 30개 이상 파일로 구성되었으며
각각 파일 용량은 서로 다릅니다.
순서대로 처리하고 싶은데 순서가 뒤죽박죽 섞이고 있습니다.
순서)
1.hwp
2.hwp
3.hwp
4.hwp
5.hwp
6.hwp
7.hwp
결과)
3.hwp
2.hwp
4.hwp
1.hwp
5.hwp
7.hwp
8.hwp
순으로 처리되고 있는데 혹 괜찮은 방법이 있을지 모르겠군요.
bart
9월 25, 2024, 1:38오전
2
안녕하세요.
웹한글 기안기 API 는 Promise 객체를 반환하지 않기 때문에 await 형식으로 호출할 수 없습니다.
callback 방식으로 호출하여 순서대로 동작하도록 작업을 하거나,
Promise 객체를 반환하도록 추가 구현을 하여 await 형식으로 호출을 해주어야 할것 같습니다.
callback 방식
Ctrl.Insert(file1, "HWP", function() {
Ctrl.Insert(file2, "HWP", function() {
Ctrl.Insert(file3, "HWP", function() {
...
}, null);
}, null);
}, null);
Promise 구현
function Insert(file) {
var a = new Promise((resolve, reject) => {
HwpCtrl.Insert(file, "HWP", "", function(res) {
resolve(res);
});
});
return a;
}
Insert(file1).then(
() => Insert(file2)
).then(
() => Insert(file3)
).then(
() => Insert(file4)
)
or
await Insert(file1);
await Insert(file2);
await Insert(file3);
await Insert(file4);
조금 다른 코드이나 질의 전 Promise 사용도 해봤지만 원하는 동기화는 되지 않았습니다.
답변 주신 내용 대로 수정해서 처리해도 결과는 변하지 않았습니다.
(Promise 사용 함수를 만들고 말씀하신 await 구문을 반복 처리했습니다.)
P사 제품은 Promise → await 형태로 문제 없었는데 어렵네요.
bart:
Ctrl.Insert(file1, "HWP", function() {
Ctrl.Insert(file2, "HWP", function() {
Ctrl.Insert(file3, "HWP", function() {
...
}, null);
}, null);
결과
우선 파일 수가 정해져 있지 않아 이런 형태의 하드 코딩은 할 수 없어 위 코드를 재귀호출(함수)로 구현하니
문제 없네요.
답변 감사합니다.
bart
9월 26, 2024, 2:12오전
4
callback 함수에서 resolve 를 해줘야 순서가 맞을것 같은데 그래도 순서가 틀어지나요??
재귀호출로 처리하셨다니 다행이네요.
추가 문의사항 있으시면 남겨주세요.