JavaScript метод Promise.resolve()
JavaScript PromiseОпределение и применение
JavaScript метод .resolve() объекта Promise возвращает объект Promise, который был успешно выполнен с заданным значением (изменяет состояние объекта Promise на fulfilled - успешное выполнение). Метод .resolve(), как правило, используется для преобразования какого-то значения в объект Promise.
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
.resolve() | 32.0 | 29.0 | 19.0 | 8.0 | Нет | Да |
JavaScript синтаксис:
Promise.resolve(value); value - Anything, или Promise, или Object (thenable)
Спецификация
ECMAScript 2015 (6th Edition, ECMA-262)Значения параметров
Параметр | Описание |
---|---|
value | Необязательные аргументы (параметры), которые будут переданы для функций обратного вызова. В качестве аргумента может содержать объект Promise, или thenable объект подобный обещанию. Под thenable объектом стоит понимать любой объект (или функция), обладающий методом then(). Если значение распознается как обещание, или объект thenable, то его состояние просто заимствуется. |
Пример использования
Простое значение в качестве аргумента
const promise = Promise.resolve("Успешно"); // Строковое значение в качестве аргумента const promise2 = Promise.resolve(["thats", "ok"]); // Массив в качестве аргумента promise.then(function(value) { // Если успешно выполнен (fulfilled) console.log(value); }, function (reason) { // Если завершился ошибкой (rejected) console.log(reason); }); // Успешно // использование стрелочной функции и метода forEach promise2.then(val => val.forEach(elem => console.log(elem)), // обработчик для успешного выполнения reason => console.log(reason)); // обработчик при отклоненном выполнении // thats // ok
В этом примере мы инициализировали две переменные, которые содержат объект Promise, который был успешно выполнен с заданным значением. В первом случае это строковое значение, а во втором массив строковых значений.
Кроме того, с использованием метода then() добавили обработчики, вызываемые когда объект Promise имеет состояние fulfilled (успешное выполнение), или rejected (выполнение отклонено). В нашем случае всегда будет срабатывать обработчик для успешного выполнения. Обратите внимание, что мы используем метод forEach() объекта Array для возможности вывести все значения из массива.
Объект Promise в качестве аргумента
const promise = Promise.resolve("Ok"); // изменяем состояние объекта на fulfilled (успешное выполнение) const promise2 = Promise.resolve(promise); promise2.then(val => console.log(val)); // обработчик для успешного выполнения // Ok const promise = Promise.reject(new Error("115")); // изменяем состояние объекта на rejected (выполнение отклонено) const promise2 = Promise.resolve(promise); promise2.then(val => console.log(val), // обработчик для успешного выполнения err => console.log(err.message)); // обработчик при отклоненном выполнении // 115
В этом примере в качестве аргумента метода .resolve() мы использовали другой объект Promise, который автоматически заставляет второе обещание ждать результата его выполнения, заимствуя при этом его состояние.
Thenable объект в качестве аргумента
// передаем в аргументе thenable объект подобный обещанию const promise = Promise.resolve({ then: (onFulfill, onReject) => onFulfill("Ok!") }); promise.then(val => console.log(val), // обработчик для успешного выполнения err => console.log(err)); // обработчик при отклоненном выполнении // Ok!
В этом примере мы в качестве аргумента метода .resolve() передаем thenable объект подобный обещанию. С использованием метода then() добавили обработчики, вызываемые когда объект Promise имеет состояние fulfilled (успешное выполнение), или rejected (выполнение отклонено). В нашем случае будет срабатывать обработчик для успешного выполнения.
const thenable = { then: function(resolve) { throw new TypeError("Error"); // генерируем исключение resolve('Resolve'); // метод не будет вызван }}; const promise = Promise.resolve(thenable) .then(val => console.log(val), // обработчик для успешного выполнения err => console.log(err.message)); // обработчик при отклоненном выполнении // Error
В этом примере мы создаем переменную, содержащую thenable объект подобный обещанию. Метод объекта генерирует исключение и при этом метод .resolve(), который содержит этот метод никогда не будет вызван, так как до этого было сгенерировано исключение. Если исключение было бы размещено после вызова метода .resolve(), то оно не было бы вызвано.
Кроме того, мы с помощью метода then() добавили обработчики, вызываемые когда объект Promise имеет состояние fulfilled (успешное выполнение), или rejected (выполнение отклонено). В нашем случае будет срабатывать обработчик при отклоненном выполнении.
JavaScript Promise