Compreendendo a ordem de execução em promessas JavaScript
As promessas em JavaScript oferecem um modelo de programação assíncrona onde o código é executado uma vez em um evento ou promessa específica , é cumprido. No entanto, ao lidar com múltiplas promessas, é essencial entender a ordem de execução para evitar comportamentos imprevisíveis.
Considere o seguinte trecho de código:
Promise.resolve('A') .then(function(a){console.log(2, a); return 'B';}) .then(function(a){ Promise.resolve('C') .then(function(a){console.log(7, a);}) .then(function(a){console.log(8, a);}); console.log(3, a); return a;}) .then(function(a){ Promise.resolve('D') .then(function(a){console.log(9, a);}) .then(function(a){console.log(10, a);}); console.log(4, a);}) .then(function(a){ console.log(5, a);}); console.log(1); setTimeout(function(){console.log(6)},0);
Após a execução, você pode observar a seguinte ordem de saída:
1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6
Compreendendo a ordem de execução
Promise.resolve('A').then(function (a) { console.log(2, a); retornar 'B'; }).then(função (a) { var p = Promise.resolve('C').then(função (a) { console.log(7, a); }).then(função (a) { console.log(8, a); }); console.log(3, a); retornar p; // Vincula a promessa interna à cadeia pai }).then(função (a) { var p = Promise.resolve('D').then(função (a) { console.log(9, a); }).then(função (a) { console.log(10, a); }); console.log(4, a); retornar p; // Vincula a promessa interna à cadeia pai }).then(função (a) { console.log(5, a); }); console.log(1); setTimeout(função(){ console.log(6) }, 0);
Com esta abordagem, a ordem de execução torna-se totalmente determinística: 1, 2 "A", 3 "B", 7 "C", 8 indefinido, 4 indefinido, 9 "D", 10 indefinidos, 5 indefinidos e 6.Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3