• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요.선생님 질문이 생겨서 글남깁니다.

21.04.05 12:30 작성 조회수 101

0

안녕하세요. 선생님. 제가 궁금한점이 생겨서 글남김니다.

현재 작업중인 코드가 있는데 for문안에 Aajax를 두번 사용하고 있습니다.

for문안에 var를 사용해서 ajax에서 사용하니 끝값을 갖게되어 전송이 제대로 안되어 고민 하던 차에 선생님 강의를 듣고 

영감을 얻어 let을 사용하여 해결 하였습니다.

문제는 크롬에서는 잘되는데  익스플로러를 사용 할때는 for문안에서 let에 문제가 있다고 들었는데요..

익스플로러에서도 사용할수 있도록 다른 방법이 있을까요?

var를 사용하면서 끝수가 아닌 순차적으로 할수 있는 방법이 있을까요?

 for(var j=0; j < result.length; j++){
                   
                let formData = new FormData();
                let errData = null;
                let Key1 = null; 
                let Key2 = null;
                let pdf =  null;
                 
               (function(j) { 
                var getToken = function(){
                return new Promise(function(resolve, reject){
                  //토큰을 얻어오기 위한 ajax
                 jQuery.ajax({
                  url: ""
                  ,type:"POST"
                  ,contentType :"application/json"
                  ,data: JSON.stringify({""})
                  ,success : function(res){
                    var token;
                    token = res["token"];
                     key1 = result[j]["Key1"]
                     Key2 = result[j]["key2"]
                     pdf = result[j]["pdf"];
                  
                    formData.append("key1", key1);
                    formData.append("Key2", Key2);
                    formData.append("pdf", pdf);

                    return resolve(token);
                  },error : function(err){
                  }
                })
                });
              }
              getToken().then(function(res){
                  //토큰을 얻고 데이터를 보내주는 ajax
                 jQuery.ajax({
                    url: ""
                   ,type:"POST"
                   ,data : formData
                   ,processData : false
                   ,contentType : false
                   ,success : function(result){
                   },error : function(err){
                  }
                 });
              });
                 })(j);
             }

답변 1

답변을 작성해보세요.

1

XMLHttpRequest는 비동기 처리이므로 처리 순서를 보장하지 않습니다. 왜냐하면 서버에서 처리하는 것에 따라 달라지기 때문입니다. 예를 들어 1번 통신이 서버에서 10초가 걸리고, 2번 통신이 서버에서 1초가 걸린다면 2번 통신이 먼저 끝납니다.

처리 순서를 보장하려면 Promise를 사용하고 있으니 async, await를 사용하면 됩니다. 이것은 비동기이지만 1번 통신이 끝나야 2번을 통신합니다. 또한 Promise.all()이 있는데 이것은 1번과 2번 통신이 모두 끝났을 때 then()이 실행됩니다. 처리하려는 것에 맞추어 방법을 선택하면 될 것입니다.

김만재님의 프로필

김만재

질문자

2021.04.06

답변 달아 주셔서 감사드립니다!  도움이 많이 되었습니다!