Markdown corrections, Russian translation and more (#24803)

1. Fixed markdown for proper render of code examples.
2. Added missing translation.
3. Translated comments.
4. Turned bits of code back english ( like function() instead of функция() ).
5. Fixed page styling structure.
pull/21122/head^2
arsts 2018-11-05 21:01:34 +03:00 committed by Gregory Gubarev
parent d7bb602130
commit 23c5c1baf4
1 changed files with 92 additions and 64 deletions

View File

@ -8,85 +8,113 @@ localeTitle: Ожидание обещаний
Чтобы понять эту тему, вы должны иметь четкое представление о том, как работают [Обещания](https://guide.freecodecamp.org/javascript/promises) .
* * *
---
## Основной синтаксис
\`\` \`javascript функция медленноResolvedPromiseFunc (строка) { return new Promise (solve => { setTimeout (() => { разрешения (строка); }, 5000); }); }
асинхронная функция doIt () { const myPromise = ждать медленноResolvedPromiseFunc ("foo"); console.log (myPromise); // "foo" }
сделай это();
```
There are a few things to note:
* The function that encompasses the `await` declaration must include the `async` operator. This will tell the JS interpreter that it must wait until the Promise is resolved or rejected.
* The `await` operator must be inline, during the const declaration.
* This works for `reject` as well as `resolve`.
---
## Nested Promises vs. `Async` / `Await`
Implementing a single Promise is pretty straightforward. In contrast, Chained Promises or the creation of a dependency pattern may produce "spaghetti code".
The following examples assume that the <a href='https://github.com/request/request-promise' target='_blank' rel='nofollow'>`request-promise`</a> library is available as `rp`.
### Chained/Nested Promises
```
Javascript // Первое обещание const fooPromise = rp ("http://domain.com/foo");
fooPromise.then (resultFoo => { // Должен дождаться "foo", чтобы разрешить console.log (resultFoo);
```
const barPromise = rp("http://domain.com/bar");
const bazPromise = rp("http://domain.com/baz");
return Promise.all([barPromise, bazPromise]);
```
}), затем (resultArr => { // Обрабатываем разрешения «bar» и «baz» здесь console.log (resultArr \[0\]); console.log (resultArr \[1\]); });
```
### `async` and `await` Promises
```
Javascript // Оберните все в асинхронной функции асинхронная функция doItAll () { // Получить данные из конечной точки «foo», но дождаться разрешения console.log (ожидание rp ("http://domain.com/foo"));
```
// Concurrently kick off the next two async calls,
// don't wait for "bar" to kick off "baz"
const barPromise = rp("http://domain.com/bar");
const bazPromise = rp("http://domain.com/baz");
// After both are concurrently kicked off, wait for both
const barResponse = await barPromise;
const bazResponse = await bazPromise;
console.log(barResponse);
console.log(bazResponse);
```
``` javascript
function slowlyResolvedPromiseFunc(string) {
return new Promise(resolve => {
setTimeout(() => {
resolve(string);
}, 5000);
});
}
// Наконец, вызовите функцию async doItAll (). then (() => console.log ('Done!'));
async function doIt() {
const myPromise = await slowlyResolvedPromiseFunc("foo");
console.log(myPromise); // "foo"
}
doIt();
```
The advantages of using `async` and `await` should be clear. This code is more readable, modular, and testable.
It's fair to note that even though there is an added sense of concurrency, the underlying computational process is the same as the previous example.
Следует отметить несколько моментов:
* Функция, которая заключаетв себе объявление `await` должна содержать оператор `async`. Это подскажит Инттерпретатору JS, что нужно дождаться разрешение и отвержения resolve.
* Оператор `await` должен быть подключен во время объявления const.
* Это работает как для `reject`, так и для `resolve`
There are a few things to note:
---
## Handling Errors / Rejection
## Вложенные Promises vs. `Async` / `Await`
Реализация одного Promise довольно просто. В отличии от Цепочки Promises или создания набора зависимостей, что может привести с созданию "spagetti code" ("спагетти из кода").
В следующих примерах подразумевается, что библитека <a href='https://github.com/request/request-promise' target='_blank' rel='nofollow'>`request-promise`</a> доступна по `rp`.
A basic try-catch block handles a rejected Promise.
### Цепочки / Вложенные Promises
``` javascript
// Первый Promise
const fooPromise = rp("http://domain.com/foo");
fooPromise.then(resultFoo => {
// Ожидайте разрешения "foo"
console.log(resultFoo);
const barPromise = rp("http://domain.com/bar");
const bazPromise = rp("http://domain.com/baz");
return Promise.all([barPromise, bazPromise]);
}).then(resultArr => {
// Обрабатываем разрешения «bar» и «baz» здесь
console.log(resultArr[0]);
console.log(resultArr[1]);
});
```
Javascript async function errorExample () { пытаться { const rejectPromise = ждать Promise.reject («О-о!»); } catch (ошибка) { console.log (ошибка); // «О-о!» } }
### `async` и `await` Promises
errorExample (); \`\` \`
``` javascript
// Оберните все в асинхронную функцию
async function doItAll() {
// Получите данные из конечной точки "foo", но дождаться разрешения
console.log(await rp("http://domain.com/foo"));
* * *
// Параллельно запустите следующие две асинхронные функции,
// не ждите пока "bar" запустит "baz"
const barPromise = rp("http://domain.com/bar");
const bazPromise = rp("http://domain.com/baz");
// Когда обе запуститлись параллельно, ждите обе
const barResponse = await barPromise;
const bazResponse = await bazPromise;
console.log(barResponse);
console.log(bazResponse);
}
// Наконец, вызовите асинхронную функцию
doItAll().then(() => console.log('Done!'));
```
Преимущества использования `async` и `await` должны быть ясны. Этот код более читабельный, модульный и поддающийся тестированию.
Справедливо заметить, что не смотря на большую степень параллелилизма, лежащий в основе вычислительный процесс идентичен тому из предыдущего примераю
---
## Разрешение Ошибок / Rejection
Обыкновенный блок попытка-перехват разрешит отвергнутый Promise.
``` javascript
async function errorExample() {
try {
const rejectedPromise = await Promise.reject("Oh-oh!");
} catch (error) {
console.log(error); // "Uh-oh!"
}
}
errorExample();
```
---
#### Дополнительная информация:
* `await` Операторы [MDN Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)
* `async` Оператор функций [MDN Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function)
* `async` Оператор функций [MDN Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function)