angular — 여러 http 호출의 데이터에 액세스-약속을 해결하는 방법
나는 솔직해야한다고 생각하는 것에 갇혀있다. 세 가지 다른 ajax 호출에서 데이터를 가져 와서 세 가지를 모두 결합 및 처리하고 결과 배열을 사용자에게 표시해야합니다.
가장 간단한 형태로 내 코드는 다음과 같습니다.
function giftControler ($scope, $http) {
var names = $http.get("names.json"),
naughty = $http.get("naughty.json"),
nice = $http.get("nice.json");
내 변수가 실제 결과가 아닌 약속에 할당되고 http 요청이 이벤트 큐에 전달되었음을 이해합니다. 실행 가능한 명령문을 따라이 변수를 정의하면 이러한 변수가 정의되지 않습니다. 계속 처리하기 위해 이러한 약속이 해결 될 때까지 기다리는 방법을 이해할 수 없습니다.
내가하고 싶은 것은 즉시 코드를 추가하는 것입니다.
for (var i=0; i<names.length; i++){
for (var j=0; j<nice.length; j++){
if (names[i] === nice[j]){
names[i] = names[i] + "--Yay!!";
};
};
};
$scope.kids = names;
문제는 마치 해결 된 배열 인 것처럼 약속을 처리 할 수 없다는 것입니다. Javascript는 http 호출 직후에 이러한 for 문을보고 약속이 해결되지 않은 경우에도 즉시 실행하려고합니다.
내가 막히는 부분은 $ http api 가 error
, success
& 세 가지 기능을 가진 promise 객체를 제공한다는 것입니다 then
. 이 경우 어떻게해야할지 모르겠습니다. 세 가지 모두에 대해 하나의 성공 함수가 필요합니다. 세 가지를 모두 해결하고 각각의 데이터를 처리 한 다음 결과를 각도 모델에 할당해야합니다.
나는 분명한 것을 놓치고 있다고 확신하지만 누군가 제안이 있습니까? 내 실제 작업에서는 여러 데이터 소스를 여러 번 호출하고 하나의 좋은 데이터 수집을 위해 많은 처리 (값 비교, 정렬, 연결 등)를 수행했지만이 문제를 통과 할 수 없습니다.
감사,
$ q의 함수 'all'을 사용할 수 있습니다.
function giftControler ($scope, $http, $q) {
var names = $http.get("names.json"),
naughty = $http.get("naughty.json"),
nice = $http.get("nice.json");
$q.all([names, naughty,nice]).then(function(arrayOfResults) {
... This callback would be called when all promised would be resolved
});
이 방법은 조금 더 깨끗합니다.
다음은 문서에 대한 링크입니다. http://docs.angularjs.org/api/ng.$q
'IT TIP' 카테고리의 다른 글
상수 이름을 포함하는 간단한 변수를 사용하여 클래스 상수에 액세스 (0) | 2021.01.09 |
---|---|
R에서 산점도의 플롯 포인트를 더 투명하게 만드는 방법은 무엇입니까? (0) | 2021.01.09 |
선택기“.class.class”와“.class .class”의 차이점은 무엇입니까? (0) | 2021.01.09 |
Bootstrap 3-화면 크기에 따라 모달 창의 높이 설정 (0) | 2021.01.09 |
CMAKE_BUILD_TYPE은 CMakeLists.txt에서 사용되지 않습니다. (0) | 2021.01.09 |