aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/promise
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
commit074785cea106179cb3305637055ab0a009ca74f2 (patch)
treee6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/javascript/reference/global_objects/promise
parentda78a9e329e272dedb2400b79a3bdeebff387d47 (diff)
downloadtranslated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz
translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2
translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip
initial commit
Diffstat (limited to 'files/ru/web/javascript/reference/global_objects/promise')
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/all/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html60
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/any/index.html81
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/catch/index.html157
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/finally/index.html98
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/index.html267
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/prototype/index.html66
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/race/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/reject/index.html76
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/resolve/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/then/index.html158
11 files changed, 1338 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/global_objects/promise/all/index.html b/files/ru/web/javascript/reference/global_objects/promise/all/index.html
new file mode 100644
index 0000000000..9d8fba83b6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/all/index.html
@@ -0,0 +1,122 @@
+---
+title: Promise.all()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/all
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all
+---
+<div>{{JSRef}}</div>
+
+<h2 id="Summary" name="Summary">Общее описание</h2>
+
+<p>Метод <code><strong>Promise.all(iterable)</strong></code> возвращает обещание, которое выполнится тогда, когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонено любое из переданных обещаний.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Promise.all(iterable)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>iterable</dt>
+ <dd>Перечисляемый объект, например, массив ({{jsxref("Array")}}). Смотрите <a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Promise")}}, который будет выполнен когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонен, если будет отклонено хоть одно из переданных обещаний.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><strong>Promise.all</strong> возвращает массив значений от всех обещаний, которые были ему переданы. Возвращаемый массив значений сохраняет порядок оригинального перечисляемого объекта, но не порядок выполнения обещаний. <code>Если какой-либо элемент перечисляемого объекта не является обещанием, то он будет преобразован с помощью метода </code>{{jsxref("Promise.resolve")}}<code>.</code></p>
+
+<p>Если одно из переданных обещаний будет отклонено, <code><strong>Promise.all </strong></code>будет немедлено отклонен со значением отклоненного обещания, не учитывая другие обещания, независимо выполнены они или нет. Если в качестве аргумента будет передан пустой массив, то <code><strong>Promise.all</strong> </code>будет выполнен немедленно<code>. </code></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Promise.all">Использование <code>Promise.all</code></h3>
+
+<p><strong>Promise.all </strong>ждет выполнения всех обещаний (или первого метода <code><strong>reject</strong>()</code>).</p>
+
+<pre><code>var p1 = Promise.resolve(3);
+var p2 = 1337;
+var p3 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 100, "foo");
+});
+
+Promise.all([p1, p2, p3]).then(values =&gt; {
+ console.log(values);
+});
+
+//Выведет:
+// [3, 1337, "foo"] </code>
+</pre>
+
+<h3 id="Promise.all_поведение_немедленного_отклонения"><code>Promise.all</code> поведение немедленного отклонения</h3>
+
+<p><strong><code>Promise.all</code></strong> будет немедленно отклонен если одно из переданных обещаний будет отклонено: если у вас есть четыре обещания которые будут выполнены с задержкой и одно, которое будет отклонено немедленно - тогда <strong><code>Promise.all</code></strong> будет немедленно отклонен.</p>
+
+<pre><code>var p1 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 1000, "one");
+});
+var p2 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 2000, "two");
+});
+var p3 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 3000, "three");
+});
+var p4 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 4000, "four");
+});
+var p5 = new Promise((resolve, reject) =&gt; {
+// Это обещание прервет Promise.all
+ reject("reject");
+});
+
+Promise.all([p1, p2, p3, p4, p5]).then(value =&gt; {
+ console.log(value);
+}, reason =&gt; {
+ console.log(reason)
+});
+
+//Выведет:
+//"reject"</code>
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Пояснение</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.all', 'Promise.all')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первоначальный вариант в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise.all")}}</p>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="Родственные_темы">Родственные темы</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.race()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html b/files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html
new file mode 100644
index 0000000000..4c125fac0c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html
@@ -0,0 +1,60 @@
+---
+title: Promise.allSettled()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/allSettled
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/allSettled
+---
+<p>{{JSRef}}</p>
+
+<p>Метод <code><strong>Promise.allSettled()</strong></code> возвращает промис, который исполняется когда все полученные промисы завершены (исполнены или отклонены), содержащий массив результатов исполнения полученных промисов.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/promise-allsettled.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>promise</em>.allSettled(<em>iterable</em>);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Любой <a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">итерируемый</a> объект, такой как {{jsxref("Array")}}, в котором каждый элемент является <code>Promise</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Promise")}}, который будет выполнен после завершения каждого промиса, вне зависимости от того выполнился он успешно или был отклонён. В то же время, в возвращаемый обработчик промиса передаётся массив, который содержит результат каждого промиса в исходном наборе промисов.</p>
+
+<p>Объект каждого результата содержит свойство <code>status</code>. Если <code>status</code> имеет значение <code>fulfilled</code> (выполнено), то объект будет содержать свойство <code>value</code>. Если <code>status</code> имеет значение <code>rejected</code> (отклонено), то объект будет содержать свойство <code>reason</code>. Свойство <code>value</code> (или <code>reason</code>) будет содержать значение с которым был выполнен (или отклонён) промис.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.es/proposal-promise-allSettled/"><code>Promise.allSettled()</code> (TC39 Stage 4 Draft)</a></td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">To contribute to this compatibility data, please write a pull request against this repository: <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>
+
+<p>{{Compat("javascript.builtins.Promise.allSettled")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Archive/Add-ons/Techniques/Promises">Promises</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Using_promises">Использование промисов</a></li>
+ <li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Promises">Graceful asynchronous programming with promises</a></li>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.all()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/any/index.html b/files/ru/web/javascript/reference/global_objects/promise/any/index.html
new file mode 100644
index 0000000000..4d0a4baa67
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/any/index.html
@@ -0,0 +1,81 @@
+---
+title: Promise.any()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/any
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any
+---
+<div>{{JSRef}}</div>
+
+<p><code>Метод Promise.any()</code> принимает итерируемый объект содержащий объекты "обещаний" {{JSxRef("Promise")}}. Как только одно из "обещаний"(<code>Promise)</code> выполнится успешно(<code>fullfill</code>), метод возвратит единственный объект <code>Promise</code> со значением выполненного "обещания". Если ни одно из "обещаний" не завершится успешно(если все "обещания" завершатся с ошибкой, т.е. <code>rejected</code>), тогда возвращенный объект promise будет отклонен(<code>rejected</code>) с одним из значений: массив содержащий причины ошибки(отклонения), или {{JSxRef("AggregateError")}} — подкласс {{JSxRef("Error")}}, который объединяет выброшенные ошибки вместе. По-существу, метод <code>Promise.any()</code> является противоположностью для {{JSxRef("Promise.all()")}}.</p>
+
+<div class="blockIndicator warning">
+<p><strong>Warning!</strong> The <code>Promise.any()</code> method is experimental and not fully supported by all browsers. It is currently in the <a href="https://github.com/tc39/proposal-promise-any" rel="external">TC39 Candidate stage (Stage 3)</a>.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre>Promise.any(<var>iterable</var>);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Итерируемый(<a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>) объект, например {{JSxRef("Array")}}.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<ul>
+ <li><strong>Исполненный</strong> {{JSxRef("Promise")}}, если переданный итерируемый объект пуст.</li>
+ <li><strong>Исполненный асинхронно</strong> {{JSxRef("Promise")}}, если переданный итерируемый объект не содержит "обещаний"(promises).</li>
+ <li>Во всех других случаях {{JSxRef("Promise")}} со статусом ожидания(<strong>pending)</strong>. Возвращенное "обещание" будет <strong>исполнено</strong>(resolved/rejected) <strong>асинхронно</strong> (как только стэк вызовов окажется пустым), когда одно(любое) "обещание" из  <em>переданного итерируемого объекта исполнится</em>, либо все "обещания" будут отклонены.</li>
+</ul>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод полезен, когда нужно вернуть первое исполненное "обещание". После того как одно из "обещаний" будет исполнено, метод не будет дожидаться исполнения остальных. В отличие от {{JSxRef("Promise.all()")}}, который содержит <em>массив(Array)</em> значений исполненных обещаний, <code>Promise.any()</code> содержит только одно значение (при условии, что хотя бы одно из "обещаний" исполнено успешно). Такой подход может быть выгодным, когда нужно, чтобы выполнилось только одно "обещание", неважно какое. Также, в отличие от {{JSxRef("Promise.race()")}}, который возвращает "обещание", содержащее значение первого <strong>завершенного(resolved или rejected)</strong>, этот метод возвращает "обещание" содержащее значение первого <strong>успешно выполненного(resolved) </strong>"обещания". Метод будет игнорировать исполнение обещаний с ошибкой(rejection) вплоть до первого исполненного успешно(fullfilment).</p>
+
+<h3 id="Успешное_исполнениеFullfilment">Успешное исполнение(Fullfilment)</h3>
+
+<p>Если одно из "обещаний" исполнится успешно, возвращенное "обещание" асинхронно исполнится успешно со значением выполненного "обещания", независимо от завершения остальных "обещаний".</p>
+
+<ul>
+ <li>Если передан пустой итерируемый объект, тогда метод возвращает (синхронно) выполненное "обещание".</li>
+ <li>Если одно из переданных обещаний исполнится успешно, или в переданном итерируемом объекте не содержится "обещаний", "обещание" возвращенное из метода <code>Promise.any</code> асинхронно исполнится успешно.</li>
+</ul>
+
+<h3 id="Исполнение_с_ошибкойRejection">Исполнение с ошибкой(Rejection)</h3>
+
+<p>Елси все переданные "обещания" будут отклонены(rejected), <code>Promise.any</code> асинхронно будет отклонено в одном из двух вариантов (которые еще не были согласованы): либо</p>
+
+<ul>
+ <li>Массив(Array) содержащий причины отклонения всех "обещаний" переданных в итерируемом объекте, либо</li>
+ <li>Объект {{JSxRef("AggregateError")}}, расширяющий {{JSxRef("Error")}}, который содержит указатель на массив(Array) исключений.</li>
+</ul>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.es/proposal-promise-any/#sec-promise.any">ESNext Promise.any Proposal</a></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Promise.any")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{JSxRef("Promise")}}</li>
+ <li>{{JSxRef("Promise.allSettled()")}}</li>
+ <li>{{JSxRef("Promise.all()")}}</li>
+ <li>{{JSxRef("Promise.race()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/catch/index.html b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html
new file mode 100644
index 0000000000..dee70fbc24
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html
@@ -0,0 +1,157 @@
+---
+title: Promise.prototype.catch()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/catch
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Prototype
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong>catch()</strong> возвращает <code>Promise(</code>обещание) и работает только в случае отклонения обещания. Ведет себя аналогично вызову {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}}.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox"><var>p.catch(onRejected)</var>;
+
+p.catch(function(reason) {
+ // отказ
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>onRejected</dt>
+ <dd>{{jsxref("Function")}} вызывается когда обещание отклонено. У этой функции один аргумент:
+ <dl>
+ <dt><code>reason</code></dt>
+ <dd>Причина отказа.</dd>
+ <dt>
+ <p>Promise( Обещание ), возвращенное catch (), отклоняется, если onRejected выдает ошибку(throw) или возвращает Promise, который был отклонен; В противном случае Promise, возвращаемый catch () имеет статус  выполнено  (fulfilled)</p>
+ </dt>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Promise")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<dl>
+ <dd>Метод <code>catch может быть полезен для обработки ошибок</code> в вашей структуре обещаний.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_catch">Использование метода <code>catch</code></h3>
+
+<pre class="brush: js">var p1 = new Promise(function(resolve, reject) {
+  resolve('Success');
+});
+
+p1.then(function(value) {
+  console.log(value); // "Success!"
+  throw 'oh, no!';
+}).catch(function(e) {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log('Not fired due to the catch');
+});
+
+// Следующий код ведет себя также, как вышенаписанный
+p1.then(function(value) {
+  console.log(value); // "Success!"
+ return Promise.reject('oh, no!');
+}).catch(function(e) {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log('Not fired due to the catch');
+});
+</pre>
+
+<h3 id="Ловим_выброшеные_исключения">Ловим выброшеные исключения</h3>
+
+<pre class="brush: js">// Выкидываемая ошибка вызовет метод catch
+var p1 = new Promise(function(resolve, reject) {
+  throw 'Uh-oh!';
+});
+
+p1.catch(function(e) {
+  console.log(e); // "Uh-oh!"
+});
+
+// Ошибки выброшеные из асинхронных функций не будут пойманы методом catch
+var p2 = new Promise(function(resolve, reject) {
+  setTimeout(function() {
+  throw 'Uncaught Exception!';
+  }, 1000);
+});
+
+p2.catch(function(e) {
+  console.log(e); // Никогда не вызовется
+});
+
+// Ошибки выброшеные после выполнения обещания будут проигнорированны
+var p3 = new Promise(function(resolve, reject) {
+ resolve();
+  throw 'Silenced Exception!';
+});
+
+p3.catch(function(e) {
+   console.log(e); // Никогда не вызовется
+});</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise.catch")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.prototype.then()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/finally/index.html b/files/ru/web/javascript/reference/global_objects/promise/finally/index.html
new file mode 100644
index 0000000000..5b4391ce47
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/finally/index.html
@@ -0,0 +1,98 @@
+---
+title: Promise.prototype.finally()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/finally
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>finally()</strong></code> возвращает {{jsxref("Promise")}}. Когда <code>Promise</code> (обещание) был выполнен, в не зависимости успешно или с ошибкой, указанная функция будет выполнена. Это дает возможность запустить один раз определенный участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнился <code>Promise</code>.</p>
+
+<p>Это позволяет вам избавиться от дубликации кода в обработчиках {{jsxref("Promise.then", "then()")}} и {{jsxref("Promise.catch", "catch()")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>p.finally(onFinally)</var>;
+
+p.finally(function() {
+ // завершен (успешно или с ошибкой)
+});
+
+p.finally(() =&gt; {
+// завершен (успешно или с ошибкой)
+});</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>onFinally</code></dt>
+ <dd>Функция {{jsxref("Function")}} вызываемая когда <code>Promise</code> (обещание) завершено.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращает {{jsxref("Promise")}} для которого в качестве обработчика <code>finally </code>задана функция <code>onFinally</code>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>finally()</code> может быть полезен, если необходимо приоизвести какие-либо вычисления или очистку, как только <code>Promise</code> (обещание) завершено, вне зависимости от результата.</p>
+
+<p><code>finally()</code> очень схож с вызовом <code>.then(onFinally, onFinally)</code>, однако существует несколько различий:</p>
+
+<ul>
+ <li>Использование <code>finally()</code> позволяет избежать двойного объявления одной и той же функции или создания переменной. </li>
+ <li><code>finally</code> не получает аргументов, так как не существует способа определить, будет ли обещание выполнено успешно или с ошибкой. Данный метод необходимо использовать, если не важна причина ошибки или результат успешного выполнения и, следовательно, нет необходимости ее/его передавать.</li>
+ <li>В отличие от <code>Promise.resolve(2).then(() =&gt; {}, () =&gt; {})</code> (результатом которого будет resolved-промис, со значением <code>undefined</code>), результатом <code>Promise.resolve(2).finally(() =&gt; {})</code> будет resolved-промис со значением <code>2</code>.</li>
+ <li>Аналогично, в отличии от <code>Promise.reject(3).then(() =&gt; {}, () =&gt; {})</code> (результатом которого будет resolved-промис, со значением <code>undefined</code>), результатом <code>Promise.reject(3).finally(() =&gt; {})</code> будет rejected-промис со значением <code>3</code>.</li>
+</ul>
+
+<div class="note">
+<p><strong>Note:</strong> A <code>throw</code> (or returning a rejected promise) in the <code>finally</code> callback will reject the new promise with the rejection reason specified when calling <code>throw()</code>.</p>
+</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">let isLoading = true;
+
+fetch(myRequest).then(function(response) {
+ var contentType = response.headers.get("content-type");
+ if(contentType &amp;&amp; contentType.includes("application/json")) {
+ return response.json();
+ }
+ throw new TypeError("Oops, we haven't got JSON!");
+ })
+ .then(function(json) { /* process your JSON further */ })
+ .catch(function(error) { console.log(error); })
+ .finally(function() { isLoading = false; });
+
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/tc39/proposal-promise-finally">TC39 proposal</a></td>
+ <td>Stage 4</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+<p class="hidden">Чтобы внести свой вклад в эти данные о совместимости, пожалуйста, напишите запрос извлечения для этого репозитория: <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>
+
+<p>{{Compat("javascript.builtins.Promise.finally")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.prototype.then()")}}</li>
+ <li>{{jsxref("Promise.prototype.catch()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/index.html b/files/ru/web/javascript/reference/global_objects/promise/index.html
new file mode 100644
index 0000000000..c4577ab151
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/index.html
@@ -0,0 +1,267 @@
+---
+title: Promise
+slug: Web/JavaScript/Reference/Global_Objects/Promise
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Promise
+ - Обещания
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise
+---
+<div>{{JSRef}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p>Объект <strong><code>Promise</code></strong> (промис) используется для отложенных и асинхронных вычислений.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/promise-constructor.html")}}</p>
+
+<div class="hidden">
+<p>Исходники интерактивного демо находятся в репозитории на GitHub. Если вы хотите внести свой вклад в развитие интерактивных демо, пожалуйста, склонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам пулреквест.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js">new Promise(<em>executor</em>);
+new Promise(function(resolve, reject) { ... });</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>executor</dt>
+ <dd>Объект функции с двумя аргументами <code>resolve</code> и <code>reject</code>. Функция <code>executor</code>  получает оба аргумента и выполняется сразу, еще до того как конструктор вернет созданный объект. Первый аргумент (<code>resolve</code>) вызывает успешное исполнение промиса, второй (<code>reject</code>) отклоняет его.<br>
+ Обычно функция <code>executor</code> описывает выполнение какой-то асинхронной работы, по завершении которой необходимо вызвать функцию <code>resolve</code> или <code>reject</code>. Обратите внимание, что возвращаемое значение функции <code>executor</code> игнорируется.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Интерфейс <code><strong>Promise</strong></code> (промис) представляет собой обертку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается <em>обещание </em>(промис)<em> </em>получить результат в некоторый момент в будущем.</p>
+
+<p><code>Promise</code> может находиться в трёх состояниях:</p>
+
+<ul>
+ <li><em>ожидание (pending)</em>: начальное состояние, не исполнен и не отклонен.</li>
+ <li><em>исполнено (fulfilled)</em>: операция завершена успешно.</li>
+ <li><em>отклонено (rejected)</em>: операция завершена с ошибкой.</li>
+</ul>
+
+<p>При создании промис находится в <em>ожидании (pending)</em>, а затем может стать <em>исполненным </em> (<em>fulfilled)</em>, вернув полученный результат (значение), или <em>отклоненным </em>(<em>rejected),</em> вернув причину отказа. В любом из этих случаев вызывается обработчик, прикрепленный к промису методом <code>then</code>. (Если в момент назначения обработчика промис уже исполнен или отклонен, обработчик все равно будет вызван, т.е. асинхронное исполнение промиса и назначение обработчика не будет происходить в «состоянии гонки», как, например, в случае с событиями в DOM.)</p>
+
+<p>Так как методы <code>{{JSxRef("Promise.then", "Promise.prototype.then()")}}</code> и <code>{{JSxRef("Promise.catch", "Promise.prototype.catch()")}}</code> сами возвращают промис, их можно вызывать цепочкой, создавая <em>соединения.</em></p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/8633/promises.png" style="height: 297px; width: 801px;"></p>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> говорят, что промис находится в состоянии <em>завершен (settled) </em>когда он или исполнен или отклонен, т.е. в любом состоянии, кроме ожидания (это лишь форма речи, не являющаяся настоящим состоянием промиса). Также можно встретить термин <em>исполен (resolved) </em>— это значит что промис <em>завершен </em>или "заблокирован" в ожидании завершения другого промиса. В статье <a href="https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md">состояния и fates</a> приводится более подробное описание терминологии.</p>
+</div>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Promise.length</code></dt>
+ <dd>Значение свойства всегда равно 1 (количество аргументов конструктора).</dd>
+ <dt>{{jsxref("Promise.prototype")}}</dt>
+ <dd>Представляет прототип для конструктора <code>Promise</code>.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Promise.all", "Promise.all(iterable)")}}</dt>
+ <dd>Ожидает исполнения всех промисов или отклонения любого из них.</dd>
+ <dd>Возвращает промис, который исполнится после исполнения всех промисов в <code>iterable</code>. В случае, если любой из промисов будет отклонен, <code>Promise.all</code> будет также отклонен.</dd>
+ <dt>{{JSxRef("Promise.allSettled", "Promise.allSettled(iterable)")}}</dt>
+ <dd>Ожидает завершения всех полученных промисов (как исполнения так и отклонения).</dd>
+ <dd>Возвращает промис, который исполняется когда все полученные промисы завершены (исполнены или отклонены), содержащий массив результатов исполнения полученных промисов.</dd>
+ <dt>{{jsxref("Promise.race", "Promise.race(iterable)")}}</dt>
+ <dd>Ожидает исполнения или отклонения любого из полученных промисов.</dd>
+ <dd>Возвращает промис, который будет исполнен или отклонен с результатом исполнения первого исполненного или отклонённого промиса из .<code>iterable</code>.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("Promise.reject", "Promise.reject(reason)")}}</dt>
+ <dd>Возвращает промис, отклонённый из-за <code>reason</code>.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("Promise.resolve", "Promise.resolve(value)")}}</dt>
+ <dd>Возвращает промис, исполненный с результатом <code>value</code>.</dd>
+ <dd>
+ <div class="hidden">
+ <p>Если у <code>value</code> имеется метод <code>then</code>, то возвращаемый промис будет "следовать" продолжению, выступая адаптером его состояния; в противном случае будет возвращен промис в исполненном состоянии. Если вы не уверены, является ли некоторое значение промисом, вы можете обернуть его в  {{JSxRef("Promise.resolve", "Promise.resolve(value)")}} и продолжить работу с ним как с промисом.</p>
+ </div>
+ </dd>
+</dl>
+
+<h2 id="Прототип_Promise">Прототип <code>Promise</code></h2>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<p>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/prototype','Свойства')}}</p>
+
+<h3 id="Методы_2">Методы</h3>
+
+<p>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/prototype','Методы')}}</p>
+
+<h2 id="Создание_промиса">Создание промиса</h2>
+
+<p>Объект <code>Promise</code> создается при помощи ключевого слова <code>new</code> и своего конструктора. Конструктор <code>Promise</code> принимает в качестве аргумента функцию, называемую "исполнитель" (<em>executor function</em>). Эта функция должна принимать две функции-коллбэка в качестве параметров. Первый из них (<code>resolve</code>) вызывается, когда асинхронная операция завершилась успешно и вернула результат своего исполнения в виде значения. Второй коллбэк (<code>reject</code>) вызывается, когда операция не удалась, и возвращает значение, указывающее на причину неудачи, чаще всего объект ошибки.</p>
+
+<pre class="brush: js">const myFirstPromise = new Promise((resolve, reject) =&gt; {
+ // выполняется асинхронная операция, которая в итоге вызовет:
+ //
+ // resolve(someValue); // успешное завершение
+ // или
+ // reject("failure reason"); // неудача
+});</pre>
+
+<p>Чтобы снабдить функцию функционалом обещаний, нужно просто вернуть в ней объект <code>Promise</code>:</p>
+
+<pre class="brush: js">function myAsyncFunction(url) {
+ return new Promise((resolve, reject) =&gt; {
+ const xhr = new XMLHttpRequest();
+ xhr.open("GET", url);
+ xhr.onload = () =&gt; resolve(xhr.responseText);
+ xhr.onerror = () =&gt; reject(xhr.statusText);
+ xhr.send();
+ });
+}</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<pre class="brush: html" style="display: none;">Создать промис!
+</pre>
+
+<pre class="brush: js">let myFirstPromise = new Promise((resolve, reject) =&gt; {
+ // Мы вызываем resolve(...), когда асинхронная операция завершилась успешно, и reject(...), когда она не удалась.
+ // В этом примере мы используем setTimeout(...), чтобы симулировать асинхронный код.
+ // В реальности вы, скорее всего, будете использовать XHR, HTML5 API или что-то подобное.
+ setTimeout(function(){
+ resolve("Success!"); // Ура! Всё прошло хорошо!
+ }, 250);
+});
+
+myFirstPromise.then((successMessage) =&gt; {
+ // successMessage - это что угодно, что мы передали в функцию resolve(...) выше.
+ // Это необязательно строка, но если это всего лишь сообщение об успешном завершении, это наверняка будет она.
+ console.log("Ура! " + successMessage);
+});</pre>
+
+<h3 id="Продвинутый_пример">Продвинутый пример</h3>
+
+<pre class="brush: html" style="display: none;">Создать промис!
+</pre>
+
+<div id="log">
+<pre class="brush: html">&lt;button id="btn"&gt;Создать Promise!&lt;/button&gt;
+&lt;div id="log"&gt;&lt;/div&gt;</pre>
+</div>
+
+<p>Данный небольшой пример показывает механизм работы с <code>Promise</code>. Метод <code>testPromise()</code> вызывается при каждом нажатии на {{HTMLElement("button")}}. При этом создаётся промис, которое успешно выполняется при помощи <code>window.setTimeout</code>, со значением <code>'result'</code> в случайном интервале от 1 до 3-х секунд.</p>
+
+<p>исполнение промиса протоколируется при помощи продолжения <code>p1.then</code>. Это показывает как синхронная часть метода отвязана от асинхронного завершения промиса.</p>
+
+<pre class="brush: js">var promiseCount = 0;
+function testPromise() {
+ var thisPromiseCount = ++promiseCount;
+
+ var log = document.getElementById('log');
+ log.insertAdjacentHTML('beforeend', thisPromiseCount +
+ ') Запуск (запуск синхронного кода)
+');
+
+ // Создаём промис, возвращающее 'result' (по истечении 3-х секунд)
+ var p1 = new Promise(
+ // Функция разрешения позволяет завершить успешно или
+ // отклонить промис
+ function(resolve, reject) {
+ log.insertAdjacentHTML('beforeend', thisPromiseCount +
+ ') Запуск промиса (запуск асинхронного кода)
+');
+ // Это всего лишь пример асинхронности
+ window.setTimeout(
+ function() {
+ // Обещание исполнено!
+ resolve(thisPromiseCount)
+ }, Math.random() * 2000 + 1000);
+ });
+
+ // Указываем, что сделать с исполненным промисм
+ p1.then(
+ // Записываем в протокол
+ function(val) {
+ log.insertAdjacentHTML('beforeend', val +
+ ') Обещание исполнено (асинхронный код завершён)
+');
+ });
+
+ log.insertAdjacentHTML('beforeend', thisPromiseCount +
+ ') Обещание создано (синхронный код завершён)
+');
+}
+</pre>
+
+<pre class="brush:js" style="display: none;">if ("Promise" in window) {
+ btn = document.getElementById("btn");
+ btn.addEventListener("click",testPromise);
+}
+else {
+ log = document.getElementById('log');
+ log.innerHTML = "Live example not available as your browser doesn't support the Promise interface.";
+}
+</pre>
+
+<pre class="brush: js">if ("Promise" in window) {
+ let btn = document.getElementById("btn");
+ btn.addEventListener("click",testPromise);
+} else {
+ log = document.getElementById('log');
+ log.innerHTML = "Демонстрация невозможна, поскольку ваш браузер не поддерживает интерфейс &lt;code&gt;Promise&lt;code&gt;.";
+}</pre>
+
+<p>Данный пример запускается при нажатии на кнопку. Для этого вам необходим браузер, поддерживающий <code>Promise</code>. При последовательных нажатиях на кнопку с коротким интервалом, вы можете увидеть как различные промиса будут исполнены один за другим.</p>
+
+<h3 id="Загрузка_изображения_при_помощи_XHR">Загрузка изображения при помощи XHR</h3>
+
+<p>Другой простой пример использования <code>Promise</code> и <code><a href="/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a></code> для загрузки изображения доступен в репозитории MDN<a href="https://github.com/mdn/js-examples/tree/master/promises-test">promise-test</a> на GitHub. Вы также можете <a href="https://mdn.github.io/js-examples/promises-test/">посмотреть его в действии</a>. Каждый шаг прокомментирован и вы можете подробно исследовать Promise и XHR.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/domenic/promises-unwrapping">domenic/promises-unwrapping</a></td>
+ <td>Черновик</td>
+ <td>Начало работы над стандартом.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise-objects', 'Promise')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://promisesaplus.com/">Спецификация Promises/A+</a></li>
+ <li><a href="http://www.html5rocks.com/en/tutorials/es6/promises/">Jake Archibald: JavaScript Promises: There and Back Again</a></li>
+ <li><a href="http://de.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript">Domenic Denicola: Callbacks, Promises, and Coroutines – Asynchronous Programming Pattern in JavaScript</a></li>
+ <li><a href="http://www.mattgreer.org/articles/promises-in-wicked-detail/">Matt Greer: JavaScript Promises ... In Wicked Detail</a></li>
+ <li><a href="https://www.promisejs.org/">Forbes Lindesay: promisejs.org</a></li>
+ <li><a href="http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html">Nolan Lawson: We have a problem with promises — Common mistakes with promises</a></li>
+ <li><a href="https://github.com/jakearchibald/es6-promise/">Promise polyfill</a></li>
+ <li><a href="https://www.udacity.com/course/javascript-promises--ud898">Udacity: JavaScript Promises</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/prototype/index.html b/files/ru/web/javascript/reference/global_objects/promise/prototype/index.html
new file mode 100644
index 0000000000..ebd0f84779
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/prototype/index.html
@@ -0,0 +1,66 @@
+---
+title: Promise.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Promise/prototype
+tags:
+ - JavaScript
+ - Обещание
+ - Свойство
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise
+---
+<div>{{JSRef}}</div>
+
+<p>Cвойство <code><strong>Promise</strong></code><strong><code>.prototype</code></strong> представляет собой прототип конструктора {{jsxref("Promise")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>{{jsxref("Promise")}} обьект наследованный от {{jsxref("Promise.prototype")}}. Вы можете использовать прототип конструктора  чтобы добавлять свойства или методы во все объекты обещаний.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Promise.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, которая создала прототип экземпляра. Это функция всех обещаний по умолчанию.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Promise.catch", "Promise.prototype.catch(onRejected)")}}</dt>
+ <dd>Добавляет функцию обратного вызова для обработки отклонения обещания, которая возвращает новое обещание выполненное с переданным значением, если она вызвана, или оригинальное значение resolve, если обещание выполнено.</dd>
+ <dt>{{jsxref("Promise.then", "Promise.prototype.then(onFulfilled, onRejected)")}}</dt>
+ <dd style="margin-bottom: 0.5cm;">Добавляет обработчик выполнения и отклонения обещания, и возвращает новое обещание выполненное со значением вызванного обработчика, или оригинальное значение, если обещание не было обработано (т.е. если соответствующий обработчик onFulfilled или onRejected не является функцией).</dd>
+</dl>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.prototype', 'Promise.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.prototype', 'Promise.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/race/index.html b/files/ru/web/javascript/reference/global_objects/promise/race/index.html
new file mode 100644
index 0000000000..79b3fba0b0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/race/index.html
@@ -0,0 +1,115 @@
+---
+title: Promise.race()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/race
+tags:
+ - ECMAScript6
+ - Promise
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race
+---
+<div>{{JSRef}}</div>
+
+<p>Метод<strong> Promise.race(iterable)</strong> возвращает выполненное или отклоненное обещание, в зависимости от того, с каким результатом завершится первое из переданных обещаний, со значением или причиной отклонения этого обещания.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/promise-race.html")}}</p>
+
+<h2 id="Синтакс">Синтакс</h2>
+
+<pre class="brush: js"><var>Promise.race(iterable)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Итерируемый объект, такой как ({{jsxref("Array")}}). Смотри <a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Выполненный или отклоненный {{jsxref("Promise")}} в зависимости от результата первого завершенного из переданных в итерируемом объекте обещаний.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>race</code>  возвращает <code>Обещание </code>(<code>Promise</code>) с результатом, первого завершенного из переданных обещаний. Т.е. возвратит resolve или reject, в зависимости от того, что случится первым.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Promise.race_–_пример_с_setTimeout">Использование <code>Promise.race</code> – пример с <code>setTimeout</code></h3>
+
+<pre class="brush: js">var p1 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 500, "один");
+});
+var p2 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 100, "два");
+});
+
+Promise.race([p1, p2]).then(function(value) {
+ console.log(value); // "два"
+ // Оба вернули resolve, однако p2 вернул результат первым
+});
+
+var p3 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 100, "три");
+});
+var p4 = new Promise(function(resolve, reject) {
+ setTimeout(reject, 500, "четыре");
+});
+
+Promise.race([p3, p4]).then(function(value) {
+ console.log(value); // "три"
+ // p3 быстрее, поэтому выведется значение его resolve
+}, function(reason) {
+ // Не вызывается
+});
+
+var p5 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 500, "пять");
+});
+var p6 = new Promise(function(resolve, reject) {
+ setTimeout(reject, 100, "шесть");
+});
+
+Promise.race([p5, p6]).then(function(value) {
+ // Не вызывается
+}, function(reason) {
+ console.log(reason); // "шесть"
+ // p6 быстрее, выводится его rejects
+});
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.race', 'Promise.race')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Promise.race")}}</p>
+
+<p> </p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/reject/index.html b/files/ru/web/javascript/reference/global_objects/promise/reject/index.html
new file mode 100644
index 0000000000..f234d5122f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/reject/index.html
@@ -0,0 +1,76 @@
+---
+title: Promise.reject()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/reject
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Promise.reject(reason)</strong></code> возвращает объект <code>Promise, который был отклонен по указанной причине</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Promise.reject(reason)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>reason</dt>
+ <dd>Причина по которой <code>Promise</code> был отклонен.</dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+ <p>Отклоненный с указаной причиной {{jsxref("Promise")}}.</p>
+ </dt>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Promise.reject</code> возвращает <code>Promise</code> который был отклонен. В целях отладки и выборочного отлова ошибок, удобно использовать в качестве причины объекты {{jsxref("Error")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_статического_метода_Promise.reject()">Использование статического метода Promise.reject()</h3>
+
+<pre class="brush: js">Promise.reject(new Error("провал")).then(function(success) {
+ // не вызывается
+}, function(error) {
+ console.log(error); // печатает "провал" + Stacktrace
+ throw error; // повторно выбрасываем ошибку, вызывая новый reject
+});</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.reject', 'Promise.reject')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Исходное определение в стандарте ECMA.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Promise.reject")}}</p>
+
+<p> </p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li><a href="http://bluebirdjs.com/docs/api/error.html">Выборочный отлов ошибок с использованием библиотеки BlueBird Promise</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html b/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html
new file mode 100644
index 0000000000..13a8ba9ee9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html
@@ -0,0 +1,138 @@
+---
+title: Promise.resolve()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/resolve
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Promise.resolve(value)</strong></code> возвращает {{jsxref("Promise")}} выполненый с переданным значением. Если переданное значение является thenable - обьект (т.е. имеет метод {{jsxref("Promise.then", "\"then\" method")}}), возвращаемое обещание будет следовать thenable - обьекту, принимая свое состояние; в ином случае возвращаемое обещание будет выполнено с переданным значением.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Promise.resolve(value)</var>;
+Promise.resolve(promise);
+Promise.resolve(thenable);
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Значение с которым будет выполнено обещание. Может также быть обещанием или обьект подобный обещанию (thenable - обьект имеющий метод then).</dd>
+</dl>
+
+<h3 id="Возращаемое_значение">Возращаемое значение</h3>
+
+<p>Выполненый с переданным значением {{jsxref("Promise")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Метод Promise.resolve</code> возвращает выполненое обещание (<code>Promise</code>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_Promise.resolve">Использование метода <code>Promise.resolve</code></h3>
+
+<pre class="brush: js">Promise.resolve("Success").then(function(value) {
+ console.log(value); // "Success"
+}, function(value) {
+ // не будет вызвана
+});
+</pre>
+
+<h3 id="Выполнение_с_массивом">Выполнение с массивом</h3>
+
+<pre class="brush: js">var p = Promise.resolve([1,2,3]);
+p.then(function(v) {
+ console.log(v[0]); // 1
+});
+</pre>
+
+<h3 id="Выполнение_с_другим_обещанием_Promise">Выполнение с другим обещанием ( <code>Promise</code>)</h3>
+
+<pre class="brush: js">var original = Promise.resolve(true);
+var cast = Promise.resolve(original);
+cast.then(function(v) {
+ console.log(v); // true
+});
+</pre>
+
+<h3 id="Выполнение_с_thenable_объектом_и_выбрасывание_исключений">Выполнение с thenable объектом и выбрасывание исключений</h3>
+
+<pre class="brush: js">// Выполнение с thenable объектом
+var p1 = Promise.resolve({
+ then: function(onFulfill, onReject) { onFulfill("fulfilled!"); }
+});
+console.log(p1 instanceof Promise) // true
+
+p1.then(function(v) {
+ console.log(v); // "fulfilled!"
+ }, function(e) {
+ // не вызывается
+});
+
+// Thenable объект выбрасывает исключение
+// перед вызовом колбека Promise resolves
+var thenable = { then: function(resolve) {
+ throw new TypeError("Throwing");
+ resolve("Resolving");
+}};
+
+var p2 = Promise.resolve(thenable);
+p2.then(function(v) {
+ // не вызывается
+}, function(e) {
+ console.log(e); // TypeError: Throwing
+});
+
+// Thenable объект выбрасывает исключение
+// после вызова колбека Promise resolves
+var thenable = { then: function(resolve) {
+ resolve("Resolving");
+ throw new TypeError("Throwing");
+}};
+
+var p3 = Promise.resolve(thenable);
+p3.then(function(v) {
+ console.log(v); // "Resolving"
+}, function(e) {
+ // не вызывается
+});
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.resolve', 'Promise.resolve')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript/promise","Promise.resolve")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/then/index.html b/files/ru/web/javascript/reference/global_objects/promise/then/index.html
new file mode 100644
index 0000000000..bf74e41b6c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/then/index.html
@@ -0,0 +1,158 @@
+---
+title: Promise.prototype.then()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/then
+tags:
+ - ECMAScript6
+ - JavaScript
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>then()</strong></code> возвращает {{jsxref("Promise")}}. Метод может принимать два аргумента: колбэк-функции для случаев выполнения и отклонения промиса.</p>
+
+<div class="note">
+<p> Если один или оба аргумента отсутсвуют или их значения не функции, то <code>then</code> пропустит их и не выбросит ошибку. Если для <code>Promise</code>, который переходит в состояние <code>выполнен</code> или <code>отклонен</code> вызван метод <code>then</code>, и у данного метода нет нужного обработчика, то в таком случае <code>then</code> просто возвращает промис с состоянием начального <code>Promise</code>, для которого <code>then</code> был вызван.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>p.then(onFulfilled[, onRejected])</var>;
+
+p.then(value =&gt; {
+ // выполнение
+ }, reason =&gt; {
+ // отклонение
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>onFulfilled</code> {{optional_inline}}</dt>
+ <dd>{{jsxref("Function")}} вызывается, когда <code>Promise</code> выполнен. Эта функция принимает один аргумент, значение с которым промис был выполнен. Если значение onFulfilled не функция, то оно автоматически заменяется на "Identity" функцию (возвращает полученный аргумент)</dd>
+ <dt><code>onRejected</code> {{optional_inline}}</dt>
+ <dd>{{jsxref("Function")}} вызывается, когда <code>Promise</code>  отклонен. Эта функция принимает один аргумент, значение с которым промис был отклонен. Если значение onRejected не функция, то оно автоматически заменяется на "Thrower" функцию (выбрасывает полученный аргумент как ошибку)</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Так как и метод <code>then</code>, и метод {{jsxref("Promise.prototype.catch()")}} возвращают <code>Promise</code>, их можно вызвать цепочкой — эта операция называется <em>соединение</em>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_then">Использование метода <code>then</code></h3>
+
+<pre class="brush: js notranslate">var p1 = new Promise(function(resolve, reject) {
+ resolve("Успех!");
+ // или
+ // reject("Ошибка!");
+});
+
+p1.then(function(value) {
+ console.log(value); // Успех!
+}, function(reason) {
+ console.log(reason); // Ошибка!
+});
+</pre>
+
+<h3 id="Соединение">Соединение</h3>
+
+<p>Так как метод <code>then</code> возвращает <code>Promise</code> (обещание), вы можете объединить несколько вызовов <code>then</code> в цепочку. Значения возвращаемые из onFulfilled или onRejected коллбэков будут автоматически обернуты в обещание.</p>
+
+<pre class="brush: js notranslate">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
+});
+
+p2.then(function(value) {
+ console.log(value); // 1
+});
+</pre>
+
+<p>Вы также можете соединить одну функцию, имеющую подобную с обещаниями API, с другой функцией.</p>
+
+<pre class="brush: js notranslate">function fetch_current_data() {
+ // API функции fetch() возвращает обещание. Эта функция
+ // имеет аналогичный API, за исключением значения в случае выполнения
+  return fetch("current-data.json").then((response) =&gt; {
+ if (response.headers.get("content-type") != "application/json") {
+ throw new TypeError();
+ }
+ var j = response.json();
+ // можем что-нибудь делать с j
+ return j; // в случае выполнения обещания, значение
+ // передается в fetch_current_data().then()
+ });
+}
+</pre>
+
+<p>Если onFulfilled возвращает обещание, возвращаемое значение может быть выполнено (resolved) / отклонено (rejected) обещанием.</p>
+
+<pre class="brush: js notranslate">function resolveLater(resolve, reject) {
+ setTimeout(function () {
+ resolve(10);
+ }, 1000);
+}
+function rejectLater(resolve, reject) {
+ setTimeout(function () {
+ reject(20);
+ }, 1000);
+}
+
+var p1 = Promise.resolve("foo");
+var p2 = p1.then(function() {
+ // Возвращает обещание, которое будет разрешено значением 10 через 1 секунду
+ return new Promise(resolveLater);
+});
+p2.then(function(v) {
+ console.log("resolved", v); // "resolved", 10
+}, function(e) {
+ // не вызвано
+ console.log("rejected", e);
+});
+
+var p3 = p1.then(function() {
+// Возвращает обещание, которое будет отброшено значением 20 через 1 секунду
+ return new Promise(rejectLater);
+});
+p3.then(function(v) {
+ // не
+ console.log("resolved", v);
+}, function(e) {
+ console.log("rejected", e); // "rejected", 20
+});</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.prototype.then', 'Promise.prototype.then')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise.then")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.prototype.catch()")}}</li>
+</ul>