테스트 사이트 - 개발 중인 베타 버전입니다

foreach 안에 promise 채택완료

7년 전 조회 2,215

foreach 안에 비동기 작동을 하는 부분이 있는데요

하나의 작업이 다 끝나면 다음 foreach 로 넘어가게 하고 싶은데 방법을 모르겠습니다 ㅜㅜ

대충 아래와 같이 되어 있는데 어떻게 해야할지...

재귀호출로 해야할까요?  아오 머리야...

 

foreach(var i in list){

    new Promise(function(resolve, reject){

        ....

        resolve();

    }).then(function(result){

        ...

    });

}

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

먼저

Promise를 사용하시는 이유가 명확해야 할것 같습니다.

단순히 서버에서 값을 확인하기 위함인지

 

그리고,

 

foreach를 사용하는 이유가 무엇인지

왜 멈추어야 하는지 

 

기본적인 로직이 왜 흐름을 중단해야 하는지를 판단해야겠죠

 

비동기는

흐름은 흐름대로 가고 결과는 결과대로 받겠다라는 기능이니

 

foreach 에서 제어하고 싶은부분을

 

비동기의 callback에서 받은결과에 따라 처리하시는게 나을것같습니다.

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

.then(function(){

  // 여기에 구성해보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

아뇨 그니까 promise 에서 then 은 쓰고 있는데 완료될때까지 foreach 가 다음단계로 넘어가지 않게 하는 방법이 궁금한거예요
@몰라무서워
비동기를 사용하시면서 동기화를 시키시겠다고 하시는거네요?
그러면 promise를 함수로 감싸서 리턴값을 callback영역인 then에서
리턴을 주고,
foreach에서 해당 리턴이 수신될때즉 변수에 할당될때 작동하게 해보세요

아니시면, 비동기를 안쓰시면 될거 같다는 생각입니다.
아 동기인데 비동기라고 제가 잘못 말했네요.
foreach 를 하나의 작업이 완료되기 전까지 다음단계로 안넘어가게 하고 싶은겁니다.

말씀하신대로 해보려고 해도 감이 안잡히네요.
제가 돌빡이라 어떻게 하라는건지 잘 이해가 안갑니다 ㅜㅜ
조금만 예제로 알려주시면 안될까요?
부탁드립니다.


foreach(var i in list){
(function(){
new Promise(function(resolve, reject){
...
}).then(function(result){
//여기서 리턴을 하면 바깥쪽의 function이 아니라 다음 then으로 리턴하지 싶은데요....
return XXX
});
})();
}

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고