JavaScript Promise.resolve() — готова виконана обіцянка
Promise.resolve() створює обіцянку, яка вже виконана з переданим значенням.
Загальний опис
Найчастіше потрібен, щоб звести типи: функція іноді бере дані з кешу (миттєво), іноді з мережі (асинхронно). Щоб той, хто її викликає, не гадав, що йому повернули, обидві гілки віддають обіцянку — і кеш обгортається в resolve().
Якщо передати йому іншу обіцянку, він поверне її ж — не загорне обіцянку в обіцянку.
В async-функції цього робити не треба: вона й так завжди повертає обіцянку, навіть якщо всередині написано return 5.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| resolve | 32+ | 29+ | 8+ | 19+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| resolve | 32+ | yes | yes | 8+ |
Приклади
+ запропонувати свій приклад у пісочниці
Кеш і мережа повертають однаковий тип — обіцянку.
(async () => {
const cache = new Map();
function loadUser(id) {
if (cache.has(id)) {
// миттєво — але все одно обіцянка, щоб тип був один
return Promise.resolve(cache.get(id));
}
return fetch('/api/users/' + id)
.then(r => r.json())
.then(user => {
cache.set(id, user);
return user;
});
}
// той, хто викликає, не гадає — завжди await
try {
const user = await loadUser(1);
console.log(user);
} catch (error) {
console.log('Запит не пройшов:', error.message);
}
// з кешу — вже без мережі
cache.set(2, { id: 2, name: 'З кешу' });
console.log(await loadUser(2));
})();
Коментарі
Коментарів ще немає — будьте першим!