약속이 무엇인지, $ Q가 가장 먼저 무엇인지 이야기합시다. Promise는 유명한 Kris Kwal의 Q 및 JQuery의 Deffered와 같은 많은 구현 방법을 갖춘 비동기 처리 모드입니다.
약속이란 무엇입니까?
전에 Ajax에 대해 배운 사람들은 콜백의 고통을 경험할 수 있습니다. 동기 코드는 디버그하기 쉽지만 비동기 콜백 코드는 개발자가 quagmire에 빠지게되며 다음과 같이 추적 할 수 없습니다.
funa (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ......})})})둥지 자체는 이미 이해하기 어렵고, 콜백은 알려지지 않은 시간에 트리거 될 것이며, 이는 부상에 모욕을 더하는 것과 같습니다.
그러나 약속 사양을 사용하면 개발자가 AngularJS와 같이 동기식으로 비동기 코드를 작성하는 데 도움이 될 수 있습니다.
deferabc.resolve (xxx)
. (funcsuccess () {}, funcerror () {}, funcnotify () {});
Resolve의 객체가 성공적으로 실행되면 funcsuccess가 트리거되고 실패하면 funcerror가 트리거됩니다. 조금 비슷합니다
deferabc.resolve (function () {SunCcess : funcsuccess, 오류 : funcerror, 알림 : funcnotify})무뚝뚝하게 말하면, 약속은 불확실한 실행 결과의 사전 정의입니다. 성공하면 xxxx가됩니다. 실패하면 사전에 약속을주는 것과 마찬가지로 xxxx가됩니다.
예를 들어, Xiaobai는 학교에있을 때 매우 게으르다. 그는 항상 그의 룸메이트에게 음식을 가져 오라고 요청했고 미리 부추와 계란이 있다면이 야채를 살 것이라고 말했습니다. 그렇지 않으면 토마토와 함께 튀긴 계란을 살 것입니다. 그가 살 수 있든 상관없이 담배 한 팩을 가져와야합니다.
Xiaobai는 룸메이트에게 식사를 가져 오라고 요청했습니다 ()
. 그런데 (파편 계란, 토마토를 곁들인 스크램블 에그)
.- 아는 (담배 패키지 포함)
$ Q 서비스
Q 서비스는 AngularJS 자체로 구현 된 약속 구현으로 Kris Kwal의 Q보다 훨씬 가볍습니다.
먼저 일반적으로 사용되는 몇 가지 $ Q를 소개하겠습니다.
연기 ()는 연기, 거부, 알림 등과 같은 일반적으로 사용되는 여러 가지 방법을 실행할 수있는 지연된 객체를 만듭니다.
모든 ()가 약속 배열을 통과하고 배치로 실행하며 약속 대상을 반환합니다.
()가 불확실한 매개 변수로 전달되면 약속 표준을 충족하면 약속 객체를 반환합니다.
약속으로, 대기 상태, 완료 상태 및 거부 상태의 세 가지 주가 정의됩니다.
상태에 관한 몇 가지 규정이 있습니다.
1 상태 변경은 돌이킬 수 없습니다
2 대기 상태가 완료되거나 거부 될 수 있습니다
연기 () 메소드
$ Q에서는 Resolve 메소드를 사용하여 완료 상태가 될 수 있습니다. 거부 방법을 사용하여 거부 상태가 되십시오.
$ Q의 간단한 사용을 살펴 보겠습니다.
<html ng-app = "myapp"> <head> <meta http-equiv = "content-type"content = "text/html; charset = utf-8"/> <script src = "http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"> </script> <div ng-controller = "myctrl"> {{test}} </div> <script type = "text/javaScript"> var myAppModule = Angular.Module ( "myApp", []); myAppModule.controller ( "myctrl", [ "$ scope", "$ q", function ($ scope, $ q) {$ scope.test = 1; // 이것은 AngularJS가 정상인지 테스트하는 데만 사용되며 다른 함수 defer1 = $ q.defer (); var promise1 = defer1.promise (conte1. Promise1 --- 성공 "); console.log (value);}, 함수 (value) {console.log ("promise1 --- 오류 "); console.log (value);}, function (value) {console.log ("promise1 --- orror "); console.log (value); {console.log (value). console.log (value) {console.log (in promise1 --- notify (value)). Console.log (value)). </script> </body> </html>DEFER ()가 지연된 객체를 만드는 데 사용되는 경우, DEFER.ROMISE는 Promise Object를 반환하여 당시 메소드를 정의하는 데 사용됩니다. 당시에는 성공적인 콜백, 실패한 콜백 및 상태 변경 콜백의 세 가지 매개 변수가 있습니다.
Resolve에 전달 된 변수 또는 함수는 결과를 반환하며 첫 번째 방법의 매개 변수로 간주됩니다. 그런 다음 메소드는 약속 객체를 반환하므로 다음과 같이 쓸 수 있습니다.
xxxx
. 그런데 (A, B, C)
. 그런데 (A, B, C)
. 그런데 (A, B, C)
.잡다()
.마지막으로()
위의 코드에 대해 계속 이야기 해 보자. 그럼 ... 캐치 ... 마침내 그것을 시도로 생각합니다 ... 캐치 ... 마침내 Java에서.
모든 () 메소드
이 모든 () 메소드는 여러 프리미스를 하나로 결합 할 수 있습니다. 모든 약속이 성공적으로 실행되면 후속 콜백이 실행됩니다. 콜백의 매개 변수는 각 약속 실행의 결과입니다.
이 방법은 일부 방법이 배치로 실행될 때 사용할 수 있습니다.
var funca = function () {console.log ( "funca"); "안녕하세요, funa"를 반환합니다. } var funcb = function () {console.log ( "funcb"); "Hello, Funb"를 반환합니다. } $ q.all ([funca (), funcb ()]) .then (function (result) {console.log (result);});실행 결과 :
펑카
funcb
배열 [ "안녕하세요, funa", "안녕하세요, funb"]
() 방법
메소드가 전달 될 수있는 경우 값이 될 수 있으며 약속 표준을 준수하는 외부 객체 일 수 있습니다.
var funca = function () {console.log ( "funca"); "안녕하세요, funa"를 반환합니다. } $ q.when (funca ()) .then (function (result) {console.log (result);});이 방법은 전달 된 매개 변수가 불확실 할 때 사용할 수 있습니다.
안녕하세요, Funa
위의 내용은 AngularJS의 약속에 관한 정보에 대한 자세한 소개입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 사이트를 지원 해주셔서 감사합니다!