-
Notifications
You must be signed in to change notification settings - Fork 8k
/
index.md
76 lines (59 loc) · 3.33 KB
/
index.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
---
title: Колбэк-функция
slug: Glossary/Callback_function
---
{{GlossarySidebar}}
Колбэк-функция (или обратный вызов) - это функция, переданная в другую функцию в качестве аргумента, которая затем вызывается по завершению какого-либо действия.
Вот краткий пример:
```js
function greeting(name) {
alert("Hello " + name);
}
function processUserInput(callback) {
var name = prompt("Please enter your name.");
callback(name);
}
processUserInput(greeting);
```
Выше приведён пример {{glossary("synchronous","синхронного")}} колбэка, поскольку функция `processUserInput` вы��олняется синхронно.
Колбэки часто используются для продолжения выполнения кода после завершения {{glossary("asynchronous","асинхронной")}} операции - они называются асинхронными колбэками.
```js
async function pageLoader(callback) {
const data = await fetch("/ru/docs/Glossary/Callback_function");
callback(data);
}
function onPageLoadingFinished(pageData) {
console.log("Page was sucessfully loaded!");
console.log("Response:");
console.log(pageData);
}
pageLoader(onPageLoadingFinished);
```
Вот ещё один пример асинхронного обратного вызова: [maps-example.html](https://github.com/mdn/learning-area/blob/master/javascript/apis/introduction/maps-example.html) ([живой пример](http://mdn.github.io/learning-area/javascript/apis/introduction/maps-example.html)). Он использует Google Maps API и Geolocation API для отображения карты текущего местоположения вашего устройства.
```js
// maps-example.html
// Вызов асинхронной функции getCurrentPosition
// с передачей callback функции принимающей координаты
// в качестве параметра
navigator.geolocation.getCurrentPosition(function (position) {
var latlng = new google.maps.LatLng(
position.coords.latitude,
position.coords.longitude,
);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.TERRAIN,
disableDefaultUI: true,
};
var map = new google.maps.Map(
document.getElementById("map_canvas"),
myOptions,
);
});
```
Поскольку получение координат устройства из его GPS является асинхронным (мы точно не знаем, когда данные будут возвращены), метод `Geolocation.getCurrentPosition()` принимает анонимную колбэк-функцию в качестве параметра, которая получает найденные данные координат. Эта функция выполняется только по возвращению данных координат.
## Больше информации
### Основное
- [Колбэки и события на компонентах](https://learn.javascript.ru/custom-events)
- [Ад обратных вызовов](http://callbackhell.ru/)