O novo padrão adiciona promessa nativa.
Aqui, discutiremos apenas o uso de correntes e pensaremos nos detalhes.
1. Revisão de então () e Catch ()
A função de retorno de chamada pode ser colocada nos parâmetros de então () e captura () para receber o resultado final de uma promessa.
Então () pode receber um parâmetro, então esse retorno de chamada só será chamado quando a promessa resolve ().
Então () também pode receber um segundo parâmetro e o segundo retorno de chamada é usado para lidar com a situação de rejeição de promessa ().
Catch () lida especificamente à situação da promessa rejeição ().
Em outras palavras, então () pode ser usado nos dois sentidos, e o Catch () pode lidar apenas com rejeição (). No entanto, é recomendável usar então () para lidar com resolve () e catch () para lidar com rejeição ().
2. No entanto, o que eu quero falar não é o acima. O exposto acima é apenas uma revisão do uso básico. Aqui começaremos com os detalhes dos valores de retorno e uso da cadeia do método então () e então ().
Em seguida, a documentação oficial diz que, em seguida, então () e Catch () retornam uma promessa, o que é muito intrigante. (Eu sou um novato em JS e nunca fui exposto a promessas anteriores na natureza).
Primeiro de tudo, essa promessa recém -devolvida não é a promessa original;
Segundo, a mudança no estado da promessa recém -retornada (resolve () ou rejeição ().) Está relacionada ao estado da promessa anterior e como então () é usado.
Primeiro explique a situação de então (): (Catch é semelhante)
var P1 = Promise.Resolve ("Sucesso"); var P2 = P1.Then (Task1); var P3 = p2.Then (Task2);NOTA: A Task1 e Task2 acima são dois retornos de chamada.
Aqui, P1 é uma promessa criada e resolve diretamente ();
P2 é uma promessa obtida com então (), e P3 também é uma promessa obtida com então ().
Então, como o estado de P2 muda e e o P3?
Vou usar a figura a seguir para explicar este conceito:
em,
1. Um octógono representa um objeto de promessa.
2. O círculo representa o estado dentro de uma promessa, e a seta preta representa a mudança de estado.
3. A seta direita representa a chamada de função então.
4. Ou seja, enquanto a função então for chamada, um novo objeto de promessa será gerado.
5. Ao chamar a função então, não sei qual é o status do objeto de promessa anterior, esteja ele pendente ou liquidado? Isso não pode ser assumido e não pode ser visto fora.
6. A chamada da função então não bloqueará, isto é, P2 e P3 são gerados quase instantaneamente, mesmo que P1 ainda esteja lentamente migrando seu próprio estado.
Sabemos que o estado de P1 é resolvido (consulte o código acima). No entanto, não foi explicado aqui como os estados da mudança de P2 e P3, ela é resolvida ou rejeitada? Veja a nova foto abaixo.
Você pode ver mais diamantes.
O diamante representa a função de retorno de chamada passada quando é chamada. O Rhombus ascendente representa o processo de ser aprovado [resolvido para o objeto de promessa anterior], e o Rhombus descendente representa o processo de ser aprovado [rejeitado para o objeto de promessa anterior].
Nota: Neste exemplo, nenhum processamento para rejeitar é passado, ou seja, o diamante descendente não deve ser desenhado na figura acima. Por uma questão de conveniência, precisamos saber apenas que o diamante para cima e para baixo está relacionado à maneira como usamos ou capturamos. Vamos dar uma olhada no código de exemplo novamente:
var P1 = Promise.Resolve ("Sucesso"); var P2 = P1.THEN (TASK1); // O RHombus ascendente é gerado var P3 = p2.Then (Task2); // O Rhombus ascendente é geradoPode -se observar que não fornecemos o segundo parâmetro de então, ou seja, não lidamos com a rejeição.
Para acrescentar, se você deseja lidar com a rejeição, pode usar ou pegar. A captura é usada especialmente para lidar com a rejeição. Além disso, não há diferença entre então.
1. Se o estado final de P1 (resolver ou rejeitar) for processado corretamente (ao ligar, o retorno de chamada correspondente será aprovado, ou seja, existe um diamante correspondente), o estado de P2 será alterado para resolver.
2. Se o estado final de P1 (resolver ou rejeitar) não for processado corretamente (ao chamar o retorno de chamada correspondente, ou seja, não há diamante correspondente), o estado de P1 será roteado para P2 (o estado de recebimento de P1).
3. Passe assim.
4. Este artigo não explica como obter os dados finais da última promessa no retorno de chamada, ou seja, como passar os dados, existem muitos tutoriais.
3. Aqui estão alguns exemplos para resumir este artigo.
Na figura, o estado de P1 é dado e a resolução ou rejeição é dada por si mesmo. O objetivo é lançar o estado final de P2 e P3.
Os acima são quatro exemplos independentes, sem conexão entre eles.
X significa que o P3 não usa a função então ou captura, portanto, não há como lidar com a resolução ou a rejeição.
Finalmente, se houver algum erro, por favor me corrija a tempo, obrigado! ~! ! @~~~
O artigo acima detalhado da rede de promessas JS é todo o conteúdo que compartilhei com você. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.