Конструктор Promise
використовується переважно для того, щоб загортати функції, які не підтримують проміси початково.
The source for this interactive demo is stored in a GitHub repository. If you'd like to contribute to the interactive demo project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
new Promise(executor);
Параметри
executor
- Функція, яка передається з аргументами
resolve
таreject
. Функціяexecutor
(виконавець) виконується негайно, реалізацією проміса, передаючи функціїresolve
таreject
(виконавець викликається ще до того, як конструкторPromise
повертає створений об'єкт). Функціїresolve
таreject
, коли вони викликаються, відповідно, вирішують або відхиляють проміс. Виконавець, зазвичай, ініціює якісь асинхронні дії, і, як тільки вони завершуються, викликає або функціюresolve
, щоб вирішити проміс, або відхиляє його в разі виникнення помилки. Якщо функція-виконавець викинула помилку, проміс відхиляється. Повернене значення виконавця ігнорується.
Приклади
Об'єкт Promise
створюється за допомогою ключового слова new
та свого конструктора. Цей конструктор приймає своїм аргументом функцію, що називається "функцією-виконавцем". Ця функція має приймати дві функції в якості параметрів. Перша з цих функцій (resolve
) викликається, коли асинхронна задача завершується успішно та повертає результат задачі. Друга (reject
) викликається, коли задача завершується неуспішно, та повертає причину невдачі, яка, зазвичай, є об'єктом помилки.
const myFirstPromise = new Promise((resolve, reject) => {
// зробити щось асинхронне, що зрештою викличе або:
//
// resolve(someValue) // виконаний
// або
// reject("причина невдачі") // відхилений
});
Щоб надати функцію з функціональністю промісу, просто зробіть, щоб вона повертала проміс:
function myAsyncFunction(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest()
xhr.open("GET", url)
xhr.onload = () => resolve(xhr.responseText)
xhr.onerror = () => reject(xhr.statusText)
xhr.send()
});
}
Специфікації
Сумісність з веб-переглядачами
BCD tables only load in the browser
To contribute to this compatibility data, please write a pull request against this repository: https://github.com/mdn/browser-compat-data.