Promise.prototype.then()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Resumo
O método then() retorna uma Promise. Possui dois argumentos, ambos são "call back functions", sendo uma para o sucesso e outra para o fracasso da promessa.
Sintaxe
p.then(quandoRealizada, quandoRejeitada); p.then(function(valor) { // sucesso }, function(motivo) { // rejeitada });
Parametros
- quandoRealizada
-
Uma
Function
chamada quando a Promise é cumprida (Sucesso). Essa função tem um argumento, o valor do cumprimento. - quandoRejeitada
-
Uma
Function
chamada quando a Promise é rejeitada. Essa função tem um argumento, o motivo da recusa.
Descrição
Assim como o método .then() e Promise.prototype.catch()
retornam uma Promise, eles podem ser encadeados - uma operação chamada composition.
Exemplos
Usando o método then
var p1 = new Promise(function (resolve, reject) {
resolve("Success!");
// or
// reject ("Error!");
});
p1.then(
function (value) {
console.log(value); // Success!
},
function (reason) {
console.log(reason); // Error!
},
);
Encadeando
Já que o método then() devolve uma Promise, você pode facilmente encadeá-los.
var p2 = new Promise(function (resolve, reject) {
resolve(1);
});
p2.then(function (value) {
console.log(value); // 1
return value + 1;
}).then(function (value) {
console.log(value); // 2
});
No exemplo acima, o último .then() recebeu a soma value + 1, que resultou em 2, porém se o retorno de value + 1 fosse uma Promise que também retornasse value + 1, o resultado seria o mesmo. Note, no exemplo abaixo, que leva 1000ms para a impressão de 2 ocorrer.
var p2 = new Promise(function (resolve, reject) {
resolve(1);
});
p2.then(function (value) {
console.log(value); // 1
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(value + 1);
}, 1000);
});
}).then(function (value) {
console.log(value); // 2
});
Especificações
Specification |
---|
ECMAScript Language Specification # sec-promise.prototype.then |
Compatibilidade com navegadores
BCD tables only load in the browser