Кадом намудҳои Promise-ро медонӣ?
sobes.tech AI
Ҷавоб аз AI
Асосныя віды прамісаў у Node.js:
-
Базавы праміс: Прадстаўляе кантэйнер для будучых значэнняў або памылак. Мае тры станы:
pending(чакае),fulfilled(выкананы паспяхова),rejected(адхілены з памылкай). Ствараецца з дапамогай канструктараnew Promise().// Стварэнне базавага праміса const myPromise = new Promise((resolve, reject) => { // Асінхронная аперацыя setTimeout(() => { const success = true; if (success) { resolve("Аперацыя паспяхова завершана"); } else { reject("Адбылася памылка"); } }, 1000); }); -
Promise.resolve(): Стварае праміс, які неадкладна пераходзіць у стан
fulfilledз зададзеным значэннем.// Стварэнне resolved праміса const resolvedPromise = Promise.resolve("Гэта ўжо выкананы праміс"); -
Promise.reject(): Стварае праміс, які неадкладна пераходзіць у стан
rejectedз зададзенай прычынай памылкі.// Стварэнне rejected праміса const rejectedPromise = Promise.reject(new Error("Гэта адхілены праміс")); -
Promise.all(): Прымае масіў прамісаў і вяртае новы праміс. Гэты новы праміс пераходзіць у стан
fulfilled, калі усе прамісы ў масіве паспяхова завершаны. Значэннем будзе масіў вынікаў у тым жа парадку, што і ўваходныя прамісы. Калі любы праміс у масіве не выконваецца,Promise.all()неадкладна адхіляецца з прычынай першага невыкананага праміса.// Выкарыстанне Promise.all() const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100)); Promise.all([promise1, promise2, promise3]) .then((values) => { // values будзе [1, 2, 3] }) .catch((error) => { // Апрацоўка памылак }); -
Promise.allSettled(): Прымае масіў прамісаў і вяртае новы праміс. Гэты новы праміс пераходзіць у стан
fulfilled, калі ўсе прамісы ў масіве або паспяхова завершаны (fulfilled), або адхілены (rejected). Значэннем будзе масіў аб'ектаў, якія апісваюць вынік кожнага праміса (стан і значэнне/прычына). У адрозненне адPromise.all(), не адразу не адхіляецца.// Выкарыстанне Promise.allSettled() const promiseA = Promise.resolve("поспех"); const promiseB = Promise.reject("памылка"); Promise.allSettled([promiseA, promiseB]) .then((results) => { // results будзе масівам аб'ектаў: // [{status: 'fulfilled', value: 'поспех'}, {status: 'rejected', reason: 'памылка'}] }); -
Promise.race(): Прымае масіў прамісаў і вяртае новы праміс. Гэты новы праміс пераходзіць у стан
fulfilledабоrejectedз вынікам/прычынай першага праміса з масіва, які або паспяхова завершаны, або неўдачлівы.// Выкарыстанне Promise.race() const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Я хуткі!"), 50)); const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Я павольны..."), 500)); Promise.race([promiseFast, promiseSlow]) .then((value) => { // value будзе "Я хуткі!" }); -
Promise.any(): Прымае масіў прамісаў і вяртае новы праміс. Гэты новы праміс пераходзіць у стан
fulfilledз значэннем першага праміса з масіва, які паспяхова завершаны. Калі усе прамісы ў масіве неўдачлівыя,Promise.any()верне памылкуAggregateError, якая ўтрымлівае прычыны ўсіх неўдачлівых прамісаў. Даступна з Node.js 12.// Выкарыстанне Promise.any() const promiseFail1 = Promise.reject("Памылка 1"); const promiseSuccess = Promise.resolve("Поспех!"); const promiseFail2 = Promise.reject("Памылка 2"); Promise.any([promiseFail1, promiseSuccess, promiseFail2]) .then((value) => { // value будзе "Поспех!" }) .catch((error) => { // Апрацоўка AggregateError, калі ўсе прамісы неўдачлівыя });