>  기사  >  웹 프론트엔드  >  AngularJS_AngularJS에서 여러 약속을 처리하는 방법

AngularJS_AngularJS에서 여러 약속을 처리하는 방법

WBOY
WBOY원래의
2016-05-16 15:16:35936검색

AngularJS를 사용하여 Promise를 처리할 때 때로는 여러 Promise를 처리해야 하는 상황에 직면하게 됩니다.

가장 간단한 해결책은 각 약속에 대해 then을 적용하는 것입니다. 다음과 같습니다:

var app = angular.module("app",[]);
app.controller("AppCtrl", function($q. $timeout){
var one = $q.defer();
var two = $q.defer();
var three = $q.defer();
$timeout(function(){
one.resolve("one done");
}, Math.random() * 1000)
$timeout(function(){
two.resolve("two done");
}, Math.random() * 1000) 
$timeout(function(){
three.resolve("three done");
}, Math.random() * 1000) 
functioin success(data){
console.log(data);
}
one.promise.then(success);
two.promise.then(success);
three.promise.then(success);
})

더 좋은 방법이 있나요?

$q.all 메소드는 약속의 배열을 허용할 수 있으며 다음과 같이 호출됩니다.

var all = $q.all([one.promise, two.promise, three.promise]);
all.then(success);

약속이란 무엇인가요?

Promise는 값을 비동기적으로 처리하는 방법입니다. Promise는 함수에서 발생하는 최종 가능한 반환 값 또는 예외를 나타내는 개체입니다. 이를 에이전트의 원격 개체로 간주할 수 있습니다. . promise도 일종의 비동기 처리 방법이라면 XHR과 $.ajax와의 차이점을 생각해 보겠습니다.

페이지가 로드된 후 XHR 요청과 같이 비동기적으로 반환된 데이터에 응답하기 위해 js가 클로저나 콜백을 사용하는 것이 일반적입니다. 콜백 함수의 트리거링에 의존하지 않고 마치 반환된 것처럼 데이터와 정상적으로 상호 작용할 수 있습니다.

그럼 ng가 제안한 약속은 어떤 문제를 해결하려는 걸까요? 콜백은 오랫동안 사용되어 왔으며 일반적으로 다른 콜백에 의존하는 콜백이 있고 각 호출 후에 오류를 표시해야 하는 경우 디버깅이 매우 어려워집니다. 차이점은 Promise가 또 다른 추상화를 제공한다는 것입니다. 이러한 함수는 Promise 객체를 반환합니다.

Promise를 사용해야 하는 이유

Promise 사용의 이점 중 하나는 콜백의 고정된 사고 논리에서 벗어날 수 있다는 것입니다. Promise를 사용하면 비동기 처리 메커니즘을 동기화와 비슷하게 보이게 만들어 예상대로 반환 값과 예외 값을 캡처할 수 있습니다. 오류는 프로그램에서 언제든지 포착될 수 있으며 프로그램 예외에 의존하는 후속 코드를 우회할 수 있습니다. 이 동기화의 이점에 대해 생각할 필요가 없습니다. 따라서 Promise를 사용하는 목적은 코드를 비동기적으로 실행하는 기능을 유지하면서 기능적 조합 및 오류 버블링 기능을 얻는 것입니다.

Promise는 일급 개체이며 몇 가지 규칙이 있습니다.

• 해결 또는 거부는 하나만 호출됩니다.

• Promise가 실행되거나 거부되는 경우 해당 Promise에 의존하는 핸들러는 계속 호출됩니다.

• 핸들러는 항상 비동기식으로 호출됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.