그래서 공장 내부 기능에 의해 가져 오는 데이터에 의존하는 2 개의 컨트롤러가 있습니다. 공장은 다음과 같습니다 내 컨트롤러에 다음2 컨트롤러는 공장 내부의 HTTP 요청에 의존합니다.
factory.getData = function() {
const req = {...};
return $http(req).then((res) => {
this.data1 = res.data.response[0];
this.data2 = res.data.response[1];
return res;
})
:
this.factory.getData().then((data) => {
this.controllerData1 = this.factory.data1;
this.controllerData2 = this.factory.data2;
})
참고 : 나는 실제 공장 이름을 생략. 이것은 내가 필요한 데이터를 얻습니다. 그러나 두 컨트롤러 모두 분명히 이상적인 http 요청을 시작하지 않습니다. 그래서 data1과 data2가 정의 될 때까지 기다리는 두 번째 컨트롤러가 필요합니다. 어떻게해야합니까?
응답 해 주셔서 감사합니다. 나는 리팩토링을 고려할 것이다. 나는 여전히 타이밍 문제가 있다고 생각한다. 2 개의 컨트롤러가 거의 동시에이 데이터를 필요로하는 경우 HTTP 요청이 이미 이루어졌지만 data1 및 data2가 아직 정의되지 않았고 실행이 _else_ 블록으로 진행될 수 있습니다. 내 코드가 여전히 2 개의 HTTP 요청을하는 것을 볼 수 있습니다. – lemontree
바로 그거야, 나는 원래의 아이디어 인 hehe와 함께 가야했다. '$ q'-less이기 때문에 실제로 더 좋습니다. 개념은 HTTP 메소드를 한 번만 실행하고 약속을 변수에 저장하고 나중에 모든 호출에서 사용합니다. 'this.dataPromise = null'을 실행하는'clearData' 함수를 만드는 것이 좋을 수도 있습니다. HTTP 호출에서 새로운 데이터를 다시 얻고 자 할 때 사용합니다. – aaronofleonard
감사합니다. 그 트릭을했습니다. data1과 data2의 데이터가 오래되지 않도록 uI-router의 상태 변경시 dataPromise를 다시 null로 재설정해야합니다. – lemontree