--- title: Promise.prototype.then() slug: Web/JavaScript/Reference/Global_Objects/Promise/then translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then ---
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.
p.then(quandoRealizada, quandoRejeitada);
p.then(function(valor) {
// sucesso
}, function(motivo) {
// rejeitada
});
Assim como o método .then() e {{jsxref("Promise.prototype.catch()")}} retornam uma Promise, eles podem ser encadeados - uma operação chamada composition.
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!
});
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 | Status | Comentários |
|---|---|---|
| domenic/promises-unwrapping | Draft | Standardization work is taking place here. |
| {{SpecName('ES6', '#sec-promise.prototype.then', 'Promise.prototype.then')}} | {{Spec2('ES6')}} | Initial definition in an ECMA standard. |
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 32 | {{CompatGeckoDesktop(24.0)}} as Future{{CompatGeckoDesktop(25.0)}} as Promise behind a flag[1]{{CompatGeckoDesktop(29.0)}} by default |
{{CompatNo}} | 19 | 7.1 |
| Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatGeckoMobile(24.0)}} as Future{{CompatGeckoMobile(25.0)}} as Promise behind a flag[1]{{CompatGeckoMobile(29.0)}} by default |
{{CompatNo}} | {{CompatNo}} | iOS 8 | 32 |
[1] Gecko 24 possui uma implementação experimental de Promise, under the initial name of Future. It got renamed to its final name in Gecko 25, but disabled by default behind the flag dom.promise.enabled. Bug 918806 enabled Promises by default in Gecko 29.