Resumo : neste tutorial, você aprenderá como usar o finally()
método JavaScript Promise para executar o código assim que a promessa for cumprida, independentemente de seu resultado.
Introdução ao método JavaScript Promise finalmente()
Suponha que você tenha uma promessa :
promise
.then(result => { ...})
.catch(error => { ... })
.finally(() => { ... })
Linguagem de código: JavaScript ( javascript )
O finally()
método é sempre executado independentemente de a promessa ser cumprida ou rejeitada. Em outras palavras, o finally()
método é executado quando a promessa é cumprida.
O finally()
método foi introduzido no ES2018. No finally()
método, você pode colocar o código que limpa o recurso quando a promessa é cumprida, independente do seu resultado.
Ao usar o finally()
método, você pode evitar código duplicado nos métodos then()
e catch()
como este:
promise
.then(result => {
// process the result
// clean up the resources
})
.catch(error => {
// handle the error
// clean up the resources
});
Linguagem de código: JavaScript ( javascript )
Agora, você pode mover a parte de limpeza dos recursos para o finally()
método a seguir:
promise
.then(result => {
// process the result
})
.catch(error => {
// handle the error
})
.finally(() => {
// clean up the resources
});
Linguagem de código: JavaScript ( javascript )
O finally()
método é semelhante ao finally
bloco da try...catch...finally
instrução. No código síncrono, você usa o finally
bloco para limpar os recursos. No código assíncrono, você usa o finally()
método.
O exemplo do método JavaScript Promise finalmente()
O seguinte define uma Connection
classe:
class Connection {
execute(query) {
if (query != 'Insert' && query != 'Update' && query != 'Delete') {
throw new Error(`The ${query} is not supported`);
}
console.log(`Execute the ${query}`);
return this;
}
close() {
console.log('Close the connection')
}
}
Linguagem de código: JavaScript ( javascript )
A Connection
classe possui dois métodos: execute()
e close()
:
- O
execute()
método executará apenas a consulta de inserção, atualização ou exclusão. Irá gerar um erro se você passar para outra consulta que não esteja na lista. - O
close()
método fecha a conexão, meio que limpando o recurso.
A connect()
função a seguir retorna uma promessa que é resolvida como new Connection
se o sinalizador de sucesso for definido como verdadeiro:
const success = true;
function connect() {
return new Promise((resolve, reject) => {
if (success)
resolve(new Connection());
else
reject('Could not open the database connection');
});
}
Linguagem de código: JavaScript ( javascript )
O exemplo a seguir usa o finally()
método para fechar a conexão:
let globalConnection;
connect()
.then((connection) => {
globalConnection = connection;
return globalConnection.execute('Insert');
})
.then((connection) => {
globalConnection = connection;
return connection.execute('Select');
})
.catch(console.log)
.finally(() => {
if (globalConnection) {
globalConnection.`close()`;
}
});
Linguagem de código: JavaScript ( javascript )
Neste exemplo:
- A
connect()
função é resolvida para um novoConnection
objeto porque osuccess
sinalizador está definido comotrue
. - O primeiro
then()
método executa aInsert
consulta e retorna umConnection
objeto. OglobalConnection
é usado para salvar a conexão. - O segundo
then()
método executa aSelect
consulta e gera um erro. Ocatch()
método mostra a mensagem de erro efinally()
fecha a conexão.
Resumo
- O
finally()
método agenda uma função para ser executada quando a promessa for cumprida, cumprida ou rejeitada. - É uma boa prática colocar o código que limpa os recursos no
finally()
método assim que a promessa for cumprida, independentemente do seu resultado.