2017-03-29 1 views
0

이전 통화가 해결되었는지 또는 거부되었는지에 따라 약속을 연결하고 싶습니다. 나는 모든 약속에서 서버에 전화를 걸고 있습니다. 모든 후 약속 개체를 반환으로 그래서,약속의 조건부 연결

apiServices.patientsSearch(id) 
.then(function(data){ 
    return callback(null,data); 
},function(err){ 
    return apiServices.studiesSearch(id); 
}).then(function(data){ 
    return callback(null,data); 
},function(){ 
    return apiServices.seriesSearch(id); 
}).then(function(data){ 
    return callback(null,data); 
}) 
.catch(function(err){ 
    return callback(false,err); 
}); 

로 삼았을 쓰고, 문제는 마지막 하나를 제외한 모든 약속 결의를 호출하는 경우 그 캐치 항상 호출되고있다. 내가 생각하는 한 가지 방법은 오류가 비어 있는지 확인하고 무시하는 것입니다. 그것을하는 것이 올바른 방법입니까? 영원히 설정하면

내가 요청 모듈을 사용하고 있습니다 : 사실 나는 영원히 거짓으로 getting-

{ [Error: socket hang up] code: 'ECONNRESET' } 

시작, 그것은 작동합니다. 요청이 끝난 후에도 내 소켓이 여전히 바쁜 이유는 무엇입니까? 다음 요청은 거부가 호출 될 때만 진행되므로 소켓은 그 시간까지 사용 가능해야합니다.

+0

가'콜백 (널 (null), 데이터)'무엇입니까? – Bergi

+0

오류 또는 결과와 함께 컨트롤러에 데이터를 전달하는 @Bergi 콜백 함수. – krrish

+0

"나는 마지막 약속 외의 어떤 약속도 해결되지 않으면 잡기가 항상 불려지는 것을 이해하지 못했다." 좀 더 설명해 주시겠습니까? – John

답변

1

callback으로 전화해야합니다. 각 약속 후 onfulfilled 핸들러로 전달하지 마십시오, 결국 한 번 전화 :

apiServices.patientsSearch(id).then(null, function(err){ 
    return apiServices.studiesSearch(id); 
}).then(null, function(){ 
    return apiServices.seriesSearch(id); 
}).then(function(data){ 
    callback(null,data); 
}, function(err){ 
    callback(false,err); 
}); 

또는 물론

apiServices.patientsSearch(id).catch(function(err){ 
    return apiServices.studiesSearch(id); 
}).catch(function(){ 
    return apiServices.seriesSearch(id); 
}).then(function(data){ 
    callback(null,data); 
}, function(err){ 
    callback(false,err); 
}); 

을, 당신은 모두에 어떤 콜백을 호출하지 않아야 약속 기반 코드이므로 기존 코드와의 인터페이스가 필요한 경우에만 사용하십시오. 그렇지 않으면, callback 매개 변수를 사용하지 않고 단지 return 약속 :

return apiServices.patientsSearch(id).catch(function(err){ 
    return apiServices.studiesSearch(id); 
}).catch(function(){ 
    return apiServices.seriesSearch(id); 
});