Vamos falar sobre o que é promessa e o que $ Q é primeiro. A Promise é um modo de processamento assíncrono, com muitos métodos de implementação, como o famoso Q e JQuery de Kris Kwal.
O que é promessa
Aqueles que aprenderam sobre o Ajax antes podem experimentar a dor dos retornos de chamada. O código síncrono é fácil de depurar, mas o código de retorno de chamada assíncrono fará com que os desenvolvedores caam em um atoleiro e não possam ser rastreados, como:
funda (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ......})})})})O ninho em si já é difícil de entender e, além disso, o retorno de chamada será desencadeado em algum tempo desconhecido, o que equivale a adicionar insulto à lesão.
No entanto, com a especificação da promessa, ele pode ajudar os desenvolvedores a escrever código assíncrono de maneira síncrona, como em AngularJS:
deferabc.resolve (xxx)
.Then (funcsuccess () {}, funcerror () {}, funcnotify () {});
Quando o objeto em resolução for executado com sucesso, o FuncSuccess será acionado e, se falhar, o Funerror será acionado. Um pouco semelhante
deferabc.resolve (function () {sunnccess: funcsuccess, erro: funerror, notify: funcnotify})Para ser franco, Promise é uma pré-definição de resultados incertos de execução. Se for bem -sucedido, será xxxx; Se falhar, será xxxx, assim como dar algumas promessas com antecedência.
Por exemplo, Xiaobai era muito preguiçoso quando estava na escola. Ele sempre pedia ao colega de quarto que trazia comida e dizia com antecedência que, se houvesse alho -poró e ovos, ele compraria este vegetal, caso contrário, compraria ovos fritos com tomate; Não importa se ele poderia comprá -los, ele deve se lembrar de trazer um pacote de cigarros.
Xiaobai pediu ao seu colega de quarto que traga refeições ()
. Então (ovos de alho -poró, ovos mexidos com tomate)
.Finalmente (com um pacote de cigarros)
$ Q serviço
O serviço Q é uma implementação de promessa implementada por si mesma em AngularJS, que é muito mais leve que o Kris Kwal's Q.
Deixe -me primeiro apresentar vários métodos comumente usados de $ q:
adefer () cria um objeto diferido, que pode executar vários métodos comumente usados, como resolver, rejeitar, notificar etc.
todos () passam na variedade de promessas, executa em lotes e retorna um objeto de promessa
Quando () passa em um parâmetro incerto, se atender ao padrão de promessa, retorna um objeto de promessa.
Na promessa, três estados são definidos: estado de espera, estado de conclusão e estado de rejeição.
Existem vários regulamentos sobre o status:
1 mudanças no estado são irreversíveis
2 O estado de espera pode ficar completo ou rejeitado
Método defer ()
Em $ Q, você pode usar o método Resolve para se tornar o estado de conclusão; Use o método de rejeição para se tornar o estado de rejeição.
Vamos dar uma olhada no uso simples de $ 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.166/ptp://apps.bdimg.com/libs/angular.js/1.2.1.16/1.1.1.1.1.1.1.1.nict.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; // Isso é usado apenas para testar se o angularjs é normal e não tem outra função var difer1 = $ q.Defer (); var promete1 = defer1.prome; Promise1 --- Success "); console.log (value);}, function (value) {console.log (" em prometo1 --- erro "); console.log (value);}, function (value) {console.log (" em prometo1 --- erro "); console.og (value);-); console.log (valor); console.log (valor); </script> </body> </html>Onde adefer () é usado para criar um objeto diferido, adiar. A prostituição é usada para retornar um objeto de promessa para definir o método então. Existem três parâmetros em seguida, a saber, retorno de chamada bem -sucedido, retorno de chamada com falha e retorno de chamada de mudança de estado.
A variável ou função aprovada no resolve retornará o resultado e será considerada como o parâmetro do primeiro método do então. Então o método retorna um objeto de promessa, para que possa ser escrito como
xxxx
.TENHEN (A, B, C)
.TENHEN (A, B, C)
.TENHEN (A, B, C)
.pegar()
.finalmente()
Vamos continuar falando sobre o código acima, então ... pegue ... finalmente pense nisso como a tentativa ... pegue ... finalmente em Java.
All () método
Este método All () pode combinar várias primeiras em uma. Quando todas as promessas forem executadas com sucesso, o retorno de chamada subsequente será executado. Os parâmetros no retorno de chamada são o resultado de cada execução da promessa.
Este método pode ser usado quando alguns métodos são executados em lotes.
var funca = function () {console.log ("funca"); retornar "Olá, FUNA"; } var funcb = function () {console.log ("funcb"); retornar "Olá, Funb"; } $ q.all ([funca (), funcb ()]) .then (function (resultado) {console.log (resultado);});Resultados da execução:
funda
funcb
Array ["Olá, FUNA", "Hello, Funb"]
Quando () método
Quando o método pode ser passado um parâmetro, que pode ser um valor, e pode ser um objeto externo que cumpra o padrão de promessa.
var funca = function () {console.log ("funca"); retornar "Olá, FUNA"; } $ q.When (funca ()) .then (function (resultado) {console.log (resultado);});Este método pode ser usado quando os parâmetros passados são incertos.
Olá, FUNA
O exposto acima é uma introdução detalhada às informações sobre a promessa --- $ Q Serviço em AngularJS. Continuaremos a adicionar informações relevantes no futuro. Obrigado pelo seu apoio a este site!