Получение результата в Promise
Промис представляет собой объект, в который параметром передается функция, внутри которой нужно размещать наш асинхронный код:
let promise = new Promise(function() {
// асинхронный код
});
Я записал объект с промисом в переменную promise
. В каком-то другом месте кода я могу применить к этой переменной метод then
, передав в него функцию с кодом, который должен быть выполнен по завершении асинхронного кода, написанного при создании данного промиса:
promise.then(function() {
// выполнится при завершении асинхронного кода
});
Я хочу решить для него нашу основную задачу асинхронности: выполнить некоторый код после срабатывания таймера. При этом я не хочу размещать этот код в самом таймере и хочу, чтобы в этот код как-то попал результат, написанный мною в переменной result
. Давайте теперь посмотрим, как это сделать через промисы:
let promise = new Promise(function (resolve) {
setTimeout(function () {
let result = [1, 2, 3, 4, 5];
// завершаем промис
resolve();
}, 3000);
});
При этом, если мы хотим передать вовне какой-то результат асинхронного кода, мы можем передать его параметром нашей функции завершения:
let promise = new Promise(function (resolve) {
setTimeout(function () {
let result = [1, 2, 3, 4, 5];
// передаем результат
resolve(result);
}, 3000);
});
Можно, конечно же, избавится от промежуточной переменной:
let promise = new Promise(function (resolve) {
setTimeout(function () {
resolve([1, 2, 3, 4, 5]);
}, 3000);
});
Теперь в любом другом месте мы можем вызвать метод then
нашего промиса. Результат работы промиса попадет в первый параметр функции, если мы пожелаем его указать:
promise.then(function(result) {
// выведет массив с результатом
console.log(result);
});