Ao usar o jQuery, eu sabia que a promessa é um modo de modo de programação assíncrono JS, mas não entendi a diferença entre ele e o objeto diferido de JQuery. À medida que o projeto da empresa avança, precisamos receber dados do back -end, por isso decidimos fazê -lo.
Promessa
A Promise é um modo que opera eventos assíncronos na forma de operações síncronas, evitando camada por camada de ninho e pode operar eventos assíncronos nas cadeias.
Sabemos que, ao escrever um código assíncrono JavaScript, o retorno de chamada é o mecanismo mais fácil, mas se você usar esse mecanismo, deve sacrificar o fluxo de controle, o manuseio de exceção e a semântica da função e até mesmo nos cair em um poço de retorno de chamada e a promessa resolve esse problema.
No ES6, os AngularJs embutidos embutidos Q na promessa, AngularJs, e quando usam promessas/A especificações, como segue:
Cada tarefa possui três estados: pendente, cumprido e falhou.
1. Estado depender: você pode fazer a transição para o estado de realização ou rejeição.
2. Estado concluído: não pode ser alterado para nenhum outro estado e o estado não pode ser alterado e deve haver um valor de valor.
3. Estado rejeitado: não pode ser alterado para nenhum outro estado e o estado não pode ser alterado, deve haver um motivo.
A transferência de estado é única. Uma vez que o estado seja cumprido (concluído) ou falhou (falhou/rejeitado), ele não pode mais mudar.
A cópia do código é a seguinte:
função oktogreet (nome) {
Nome de retorno === 'Robin Hood';
}
função asyncGreet (nome) {
var diferred = $ q.defer ();
setTimeout (function () {
// Porque essa função assíncrona FN é executada no futuro de forma assíncrona, envolvemos o código na chamada $ Aplicar, enquanto observamos corretamente a mudança no modelo
$ SCOPE. $ Aplicar (function () {
adido.notify ('prestes a cumprimentar' + nome + '.');
if (oktogreet (nome)) {
diferred.resolve ('hello,' + name + '!');
} outro {
diferred.reject ('saudação' + nome + 'não é permitido.');
}
});
}, 1000);
return diferred.promise;
}
var promete = assíncrono ('robin hood');
Promise.Then (função (saudação) {
alerta ('sucesso:' + saudação);
}, função (Razão) {
alerta ('falhou:' + razão);
}, function (update) {
alerta ('obteve notificação:' + atualização);
});
Uso básico de q promessa
O código acima mostra a função de vários métodos de instâncias desviadas construídas por $ q.defer (). Se a operação assíncrona for bem -sucedida, o estado do objeto de promessa será alterado para "sucesso" (ou seja, de pendente para resolvido); Se a operação assíncrona falhar, o estado será alterado para "falha" (ou seja, de pendente para rejeitado). Finalmente, retorne adiado.promese e podemos encadear chamado o método então.
O JS terá promessa nativa, já existem objetos de promessa no ES6, e a API básica de promessa é implementada nas versões Beta Firefox e Chrome 32.
$ Q.Defferd em AngularJS
Retorne o objeto desviado a ser chamado de Chaned chamando $ q.defferd. Este objeto associa as três tarefas estados nas promessas/uma especificação por meio da API.
API desviada
Método de objeto desviado
1.Resolve (valor): Na declaração resolve (), indica que o objeto de promessa muda do estado pendente para resolver.
2.Rejetar (Motivo): Na declaração resolve (), indica que o objeto de promessa muda do estado pendente para rejeitar.
3.Notify (Value): Na declaração notify (), indica que o estado não realizado do objeto Promise pode ser chamado várias vezes antes de resolver ou rejeitar.
Propriedades de objetos desviados
Promessa: A última coisa que retorna é uma nova propriedade de promessa de objeto diferido, não o objeto diferido original. Esse novo objeto de promessa pode observar apenas o status do objeto Promíssimo original e não pode modificar o estado interno do objeto diferido, que pode impedir que o estado da tarefa seja modificado externamente.
Promise API
Ao criar uma instância diferida, um novo objeto de promessa é criado e a referência pode ser obtida por meio de diferido.
O objetivo do objeto Promise é permitir que a parte interessada obtenha seus resultados de execução quando a tarefa diferida for concluída.
Métodos de Promise Objetos
1. então (ErrorHandler, FelFilledHandler, ProgressHandler): O método então é usado para ouvir para diferentes estados de uma promessa. O ErrorHandler ouve o estado falhado, o FelfilledHandler ouve o estado cumprido e o ProgressHandler ouve o estado não cumprido. Além disso, o retorno de chamada do notificação pode ser chamado 0 a várias vezes, fornecendo uma indicação de progresso antes de resolver ou rejeitar (resolver e rejeitar).
2.Catch (ErrorCallback) - Atalho para Promise.Then (NULL, ErrorCallback)
3. Finalmente (retorno de chamada) - permite observar se uma promessa é executada ou rejeitada, mas você não precisa modificar o último valor. Isso pode ser usado para liberar recursos ou limpar objetos inúteis, independentemente de a promessa ser rejeitada ou resolvida. Para mais informações, consulte a especificação completa da documentação.
A chamada da cadeia de promessa pode ser implementada através do método então ().
A cópia do código é a seguinte:
PromiseB = Promisea.then (function (resultado) {
resultado de retorno + 1;
});
// PromiseB será processado imediatamente após o processamento da Promisea,
// e seu valor de valor é o resultado de Promisea aumentar em 1
Outros métodos de $ q
$ Q.When (Value): Passe o valor variável, Promise.Then () executa um retorno de chamada bem -sucedido
$ Q.All (promessas): Várias promessas devem ser executadas com sucesso antes que possam ser executadas com sucesso. O valor é passado como uma matriz ou valor de hash. Cada valor na matriz é o objeto Promise correspondente ao índice.