You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2.If the response has status`200`, call `.json()` to read the JS object.
5
+
2.Если в ответ приходит статус`200`, вызываем метод `.json()`, чтобы прочитать JS-объект.
6
6
7
-
If a `fetch` fails, or the response has non-200 status, we just return `null`in the resulting arrray.
7
+
Если запрос завершается ошибкой или код статуса в ответе отличен от 200, то мы просто возвращаем `null`в массиве результатов.
8
8
9
-
So here's the code:
9
+
Вот код:
10
10
11
11
```js demo
12
12
asyncfunctiongetUsers(names) {
@@ -34,8 +34,8 @@ async function getUsers(names) {
34
34
}
35
35
```
36
36
37
-
Please note: `.then`call is attached directly to `fetch`, so that when we have the response, it doesn't wait for other fetches, but starts to read `.json()` immediately.
37
+
Пожалуйста, обратите внимание: вызов `.then`идёт сразу после `fetch`, то есть когда ответ получен, сразу начинаем считывание данных с помощью `.json()`, не дожидаясь завершения других запросов.
38
38
39
-
If we used `await Promise.all(names.map(name => fetch(...)))`, and call `.json()`on the results, then it would wait for all fetches to respond. By adding `.json()`directly to each`fetch`, we ensure that individual fetches start reading data as JSON without waiting for each other.
39
+
Если бы мы использовали `await Promise.all(names.map(name => fetch(...)))` и вызывали бы `.json()`на результатах запросов, то пришлось бы ждать, пока завершатся все из них. Вызывая `.json()`сразу после каждого`fetch`, мы добились того, что считывание присланных по каждому запросу данных происходит независимо от других запросов.
40
40
41
-
That's an example of how low-level`Promise` API can still be useful even if we mainly use`async/await`.
41
+
Это пример того, как относительно низкоуровневое`Promise` API может быть полезным, даже если мы в основном используем`async/await` в коде.
Create an async function `getUsers(names)`, that gets an array of GitHub user names, fetches them from GitHub and returns an array of GitHub users instead.
3
+
Создайте асинхронную функцию `getUsers(names)`, которая получает на вход массив логинов пользователей GitHub, запрашивает у GitHub информацию о них и возвращает массив объектов-пользователей.
4
4
5
-
The GitHub url with user informaiton is: `https://api.github.com/users/USERNAME`.
5
+
Информация о пользователе GitHub с логином USERNAME доступна по ссылке: `https://api.github.com/users/USERNAME`.
6
6
7
-
There's a test example in the sandbox.
7
+
В песочнице есть тестовый пример.
8
8
9
-
Important details:
9
+
Важные детали:
10
10
11
-
1.There should be one `fetch` request per user. And requests shouldn't wait for each other. So that the data arrives as soon as possible.
12
-
2.If a request fails, or if there's no such user, the function should return`null`in the resulting array.
11
+
1.На каждого пользователя должен приходиться один запрос `fetch`. Запросы не должны ожидать завершения друг друга. Надо, чтобы данные приходили как можно быстрее.
12
+
2.Если какой-то запрос завершается ошибкой или оказалось, что данных о запрашиваемом пользователе нет, то функция должна возвращать`null`в массиве результатов.
Для получения текста, используем `await response.text()` вместо `.json()`:
86
+
Для получения текста используем `await response.text()` вместо `.json()`:
87
87
88
88
```js run async
89
89
let response =awaitfetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits');
@@ -144,7 +144,7 @@ for (let [key, value] of response.headers) {
144
144
}
145
145
```
146
146
147
-
Для установки заголовка, мы можем использовать опцию `headers`, например:
147
+
Для установки заголовка мы можем использовать опцию `headers`, например:
148
148
149
149
```js
150
150
let response =fetch(protectedUrl, {
@@ -181,7 +181,7 @@ let response = fetch(protectedUrl, {
181
181
182
182
## POST-запросы
183
183
184
-
Для отправки `POST`запроса или запроса с другим методом, нам необходимо использовать `fetch` параметры:
184
+
Для отправки `POST`-запроса или запроса с другим методом, нам необходимо использовать `fetch` параметры:
185
185
186
186
-**`method`** -- HTTP метод, например `POST`,
187
187
-**`body`** -- один из:
@@ -218,7 +218,7 @@ alert(result.message);
218
218
219
219
Мы можем отправить бинарные данные напрямую, используя `Blob` или `BufferSource`.
220
220
221
-
Например, у нас есть элемент `<canvas>`, на котором мы можем рисовать движением мыши. При нажатии на кнопку "Отправить", изображение отправляется на сервер:
221
+
Например, у нас есть элемент `<canvas>`, на котором мы можем рисовать движением мыши. При нажатии на кнопку "Отправить" изображение отправляется на сервер:
222
222
223
223
```html run autorun height="90"
224
224
<bodystyle="margin:0">
@@ -285,7 +285,7 @@ fetch(url, options)
285
285
-`response.ok` -- `true`, если статус ответа в диапазоне 200-299.
286
286
-`response.headers` -- похожий на `Map` объект с HTTP-заголовками.
287
287
288
-
Методы для получения тела ответа:
288
+
Методы для получения тела ответа:
289
289
-**`response.json()`** -- преобразовывает ответ в JSON-объект,
290
290
-**`response.text()`** -- возвращает ответ как обычный текст,
291
291
-**`response.formData()`** -- возвращает ответ как объект FormData (кодировка form/multipart, см. следующую главу),
0 commit comments