Promessas JavaScript: o enigma de rejeitar vs. lançar
Ao trabalhar com promessas JavaScript, os desenvolvedores muitas vezes enfrentam um dilema: eles devem usar o Promise .reject ou simplesmente gera um erro? Embora ambos os métodos tenham um propósito semelhante, permanece a confusão em relação às suas diferenças e vantagens potenciais.
Explorando as semelhanças
Em última análise, não há vantagem inerente em usar Promise.reject sobre lançar um erro ou vice-versa. Ambos os mecanismos definem a promessa para o estado rejeitado e acionam a execução do manipulador .catch ou catch().
Revelando uma distinção sutil
No entanto, um caso específico existe onde lançar um erro é insuficiente: retornos de chamada assíncronos fora dos retornos de chamada de promessa. Nessas situações, Promise.reject é a única opção para tornar o estado rejeitado conhecido pela cadeia de promessas.
Considere o seguinte exemplo:
new Promise(function() {
setTimeout(function() {
throw 'or nah';
// Using Promise.reject('or nah') also won't work in this case
}, 1000);
}).catch(function(e) {
console.log(e); // doesn't happen
});
Nesse cenário, o erro lançado dentro do retorno de chamada setTimeout não será capturado pelo manipulador .catch porque não é executado dentro de um retorno de chamada de promessa. Para lidar com esse tipo de situação de maneira eficaz, Promise.reject deve ser usado no retorno de chamada assíncrono.
Escolhendo a melhor prática
Em geral, Promise.reject ou throw um erro pode ser usado para definir uma promessa para o estado rejeitado. No entanto, ao trabalhar com retornos de chamada assíncronos fora dos retornos de chamada de promessa, Promise.reject se torna a única opção viável.
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