2017-12-09 1 views
1

for 루프가 완료 될 때까지 루프 외부에서 작성된 명령문을 nodeJS가 실행하는 것을 중지하는 방법은 무엇입니까?NodeJS의 For 루프에 대한 약속 방법

for(i=0;i<=countFromRequest;i++) 
{ 
    REQUEST TO MODEL => then getting result here (its an object) 
    licensesArray.push(obj.key); 
} 
res.status(200).send({info:"Done Releasing Bulk Licenses!!!",licensesArray:licensesArray}) 

문제는 For 루프 후 문이 루프를 들어 이전에 실행되고 있음을, 그래서 내가 API 데이터를받을 때 licensesArray가 비어 있습니다.

실마리는 어떻게해야합니까?

감사합니다. Promise.all를 사용

const licensesArray = []; 

for(let i = 0; i <= countFromRequest; i++) { 
    const obj = await requestModel(); // wait for model and get resolved value 
    licensesArray.push(obj.key); 
} 

res.status(200).send({licensesArray}); 

: 비동기/기다리고를 사용

+0

당신은 필요'모델에 요청 await'. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function –

답변

1

const pArr = []; 
const licensesArray = []; 

for(let i = 0; i <= countFromRequest; i++) { 
    pArr.push(requestModel().then(obj => { 
     licensesArray.push(obj.key); 
    })); 
} 

Promise.all(pArr).then(() => { // wait for all promises to resolve 
    res.status(200).send({licensesArray}); 
}); 

내가 와 함께 갈 것 비동기 /는 읽기가 쉬울 것 같은 환경이 지원하는 경우을 기다리고 있습니다 동기화 된 사고 방식으로 프로그래밍 할 수 있습니다 (여전히 비동기식입니다). 환경이 지원하지 않는 환경에서는 Promise.all 접근 방식을 사용할 수 있습니다.

추가 읽기 :

+0

완벽한 완벽한 .. 알겠습니다. –

관련 문제