2016-10-18 2 views
0

나는 오류가 잡히면 다시 시도하기 위해 다른 방법으로 래핑 된 약속 (요청 약속)이 있습니다. 그 부분은 잘 작동합니다. 결국에는 많은 양의 http 요청이 있기 때문에 promise.all()을 사용하려고합니다. 지금까지 사용하고있는 방법으로 모든 재시도 시도가 완료되기 전에 promise.all()은 여전히 ​​콜백 함수를 호출합니다. promise.all()이 콜백을하기 전에 모든 재시도 시도가 끝날 때까지 기다릴 수있는 방법이 있습니까? 좋아Promise.all()을 사용하여 개인이 오류시 다시 시도 약속 함

var http_req = require('request-promise') 

function My_Http(retries, options) 
{ 
    return http_req(options) 
      .then(data=>{console.log('success')}) 
      .catch(err => { 
       retries > 0 ? My_Http(retries-1, options) : console.log(err.message) 
      }) 
} 

var promises = [] 
promises.push(My_Http(3, options1)) 
promises.push(My_Http(3, options2)) 

promise.all(promises).then(data=> {console.log(data)}) 

답변

1

나는이 바보 같은 실수를했지만 다른 사람들이 볼 수 있도록 좋은 것 같아요, 나는 My_Http 안에 다음 제거하고 전체 삼항 문을 반환합니다.

var http_req = require('request-promise') 

function My_Http(retries, options) 
{ 
    return http_req(options) 
      .catch(err => { 
       return retries > 0 ? My_Http(retries-1, options) : console.log(err.message) 
      }) 
} 

var promises = [] 
promises.push(My_Http(3, options1)) 
promises.push(My_Http(3, options2)) 

promise.all(promises).then(data=> {console.log(data)}) 
+0

그래, 당신은 적절하게 그것을 연결하기 위해 재 시도 약속을 반환해야합니다. '.then()'은 재 시도를 막지 못했다.'.then()'에서 값을 반환하지 않았기 때문에 반환 값을 얻지 못하게 막는 것이었다. – jfriend00

+1

참고 : then 블록은 괜찮 았습니다. 차이를 만드는 catch 블록의 리턴 값입니다. –

+0

은'.push'가 아닌'.map'을 선호합니다. –