--- 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.