Кайсы 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абалына өтүүчү убада түзөт, белгилүү бир мааниге ээ:// Чечилген убада түзүү const resolvedPromise = Promise.resolve("Бул эми аткарылган убада"); -
Promise.reject(): Убакытта
rejectedабалына өтүүчү убада түзөт, катанын себеби менен:// Катталган убада түзүү const rejectedPromise = Promise.reject(new Error("Бул четке кагылган убада")); -
Promise.all(): Убада массивин кабыл алып, жаңы убада кайтарат. Бардык убада ийгиликтүү аяктагандан кийин
fulfilledабалына өтөт. Натыйжасы — массив, ал ошол эле тартипте болот. Эгер бир убада да катталса, биринчи катталган убада менен четке кагылат:// 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жеrejectedабалына өтөт. Натыйжасы — объекттердин массиви, алардын ар бири убада натыйжасын сүрөттөйт:// 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абалына өтөт. Бардык убада катталса,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` иштетилет });