Dr_Lion Posted February 10, 2014 at 04:41 PM Report #544667 Posted February 10, 2014 at 04:41 PM Estou a usar o try - catch para obter os dados de um serviço externo, a questão é que por vezes ocorre connection timeout, e queria arranjar forma de repetir a obtenção de dados até que a excepção deixe de existir. Tinha pensado algo do estilo: try { obter dados do exterior; } catch (exception) { repetir até não existir exceção } O problema é que não sei como fazer isto do ponto de vista semântico. O que me ocorre seria por um try..catch dentro do catch, mas isto apenas iria resolver um nível de exceção e se ocorresse duas vezes seguida a informação seria suprimida. Talvez usando um while? a minha dúvida agora seria como usar um while try ctach ou algo do género, isto partindo do principio que é possível. Alguém tem sugestões?
nelsonr Posted February 10, 2014 at 04:49 PM Report #544670 Posted February 10, 2014 at 04:49 PM Algo assim? $terminou=false; while(!$terminou) { try { // obter dados do exterior; $terminou=true; } catch(Exception $ex) { //repetir até não existir exceção } }
HappyHippyHippo Posted February 10, 2014 at 04:54 PM Report #544672 Posted February 10, 2014 at 04:54 PM (edited) e queria arranjar forma de repetir a obtenção de dados até que a excepção deixe de existir. isso é uma muito má opção ... o que deverias ter seria um contador que iria efectuar a operação N vezes deixando falahar ao fim dessas N vezes, caso contrário, poderás ter um ciclo infinito ... $ntries = 3; $try = 0; $ok = false; do { $try++; try { // do stuff ... $ok = true; } catch(Exception $ex) { } } while (!$ok && $try <= $ntries); Edited February 10, 2014 at 04:54 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Dr_Lion Posted February 10, 2014 at 05:03 PM Author Report #544674 Posted February 10, 2014 at 05:03 PM Isto vai dar uma grande salganhada.. mas desde que funcione, serve. É que já tenho um ciclo fora, e então iria ficar algo deste género. while ("iterar sobre um ano semana a semana") { $terminou=false; while(!$terminou) { try { // obter dados do exterior; $terminou=true; } catch(Exception $ex) { //repetir até não existir exceção } } } Mas não cometeste aí um erro qualquer? A inicialização não tem que ser a true, e meter a variável $terminou a false dentro do catch? isso é uma muito má opção ... o que deverias ter seria um contador que iria efectuar a operação N vezes deixando falahar ao fim dessas N vezes, caso contrário, poderás ter um ciclo infinito ... $ntries = 3; $try = 0; $ok = false; do { $try++; try { // do stuff ... $ok = true; } catch(Exception $ex) { } } while (!$ok && $try <= $ntries); Sinceramente também tens razão, a questão de provocar um ciclo infinito pode ser igualmente má. Vou ter que refletir melhor sobre este assunto e forma correta de tratar a falha, provavelmente será com um número de tentativas máximo e um ficheiro de log para registar as falhas.. Obrigado pela pronta ajuda.
nelsonr Posted February 10, 2014 at 05:24 PM Report #544684 Posted February 10, 2014 at 05:24 PM Mas não cometeste aí um erro qualquer? A inicialização não tem que ser a true, e meter a variável $terminou a false dentro do catch? Não me parece. Se iniciasse a true, nem entrava no while.
Dr_Lion Posted February 11, 2014 at 10:36 AM Author Report #544809 Posted February 11, 2014 at 10:36 AM Não me parece. Se iniciasse a true, nem entrava no while. Já reparei que me esqueci de dizer que dentro do while não poderia ser negado. E ia dar ao mesmo, só que em vez de estar true dentro do try, estaria o false dentro do catch..
nelsonr Posted February 11, 2014 at 10:43 AM Report #544811 Posted February 11, 2014 at 10:43 AM E achas isso teria alguma logica o nome dessa variavel ser terminou e começar a true?
Dr_Lion Posted February 19, 2014 at 12:02 PM Author Report #545779 Posted February 19, 2014 at 12:02 PM E achas isso teria alguma logica o nome dessa variavel ser terminou e começar a true? Tens razão.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now