Nós (e a sala de bate-papo do JS SO) conversamos com o @rlemon alguns dias atrás sobre sua biblioteca Little-XHR sobre tratamento de erros.
Basicamente, queríamos decidir qual padrão de tratamento de erros deve ser usado:
xhr.get({
// Some parameters, and then
success: function(data) {},
failure: function(data) {}
})
Ou:
xhr.get({
// Some parameters, and then
callback: function(err, data) {}
})
Um é mais parecido com jQuery, enquanto o outro é mais parecido com um nó. Alguns dizem que o primeiro padrão faz você pensar mais sobre como lidar com erros. Penso o contrário, pois você pode esquecer a outra função de retorno de chamada, enquanto o argumento está sempre presente no segundo padrão.
Alguma opinião / vantagem / desvantagem sobre esses dois padrões?
javascript
error-handling
Florian Margaine
fonte
fonte
xhr.get({ ... }, function (err, data) {})
Pelo menos obter o padrão certoRespostas:
O recurso realmente importante é a consistência do estilo, para que você possa escrever código no mesmo estilo e faça suposições de meta-programação sobre como as situações assíncronas são tratadas.
Eu pessoalmente prefiro
(err, data)
porque é uma maneira padrão de lidar com as coisas. Permite a composição da função.Por exemplo,
after.map
usa esse padrão. Então codifique comopode ser simplificado para
Outra vantagem é que você pode transmitir um retorno de chamada como último parâmetro
A última abordagem de retorno de chamada é uma boa abordagem de familiaridade da API.
Uma vantagem adicional é que você pode facilmente esquecer de definir o
error
manipulador no literal do objeto ou configurá-lo para algum tipo de manipulador de erro padrão.Quando você o usa,
(err, data)
ele lembra que você deve sempre pensar em como lidar com esse erro com eficiência.fonte
Geralmente, gosto de lembrar que o explícito é sempre melhor do que o implícito.
Usando isso, eu normalmente ficaria do lado de funções
success
e explícitasfailure
- você sabe exatamente com o que está lidando no momento em que abre o código - o sucesso lida com chamadas concluídas com êxito, enquanto o erro lida com chamadas com problemas.A alternativa, usando um único método, levará mais tempo para ler quando você modificar esse código. Além disso, você provavelmente acabaria com algo assim;
E esse tipo de clichê fica chato, rápido.
Sem mencionar, se você esquecer de adicionar este padrão, e por exemplo, você está apenas lidando com sucesso, então um novo desenvolvedor que entra na base de código pode não ver um problema com ele. Mas, com retornos de chamada de erro / sucesso explícitos, eles poderão ver rapidamente que você está perdendo um
error
retorno de chamada e começar a trabalhar em uma maneira de lidar com isso, ou pelo menos descobrir "bem, isso é apenas lidar com o sucesso - devo encontre uma maneira de lidar com erros ". Faz o código parecer menos mágico.fonte
err
parâmetroRetornos de chamada separados
Se a
xhr.get()
chamada for bem-sucedida,err
será redundante. Se a chamada falhar.data
é redundante. Em vez de forçar o código do cliente a verificar o estado de um ou de outro, não passe os dois.Se o sucesso puder representar sucesso parcial, indique-o separadamente. A falha geralmente é a opção de resgate.
Trabalhei com desenvolvedores que apenas lidam com o caso de sucesso e, em muitos cenários, apenas a implementação de um retorno de chamada de sucesso seria suficiente nesse caso. Um retorno de chamada de vários estados seria uma opção catastrófica para esse estilo de programação, pois eles assumiriam sucesso.
fonte