logo

Метод JavaScript Promise all().

The Метод Promise.all(). насправді є методом об’єкта Promise (який також є об’єктом під JavaScript, що використовується для обробки всіх асинхронних операцій), який приймає масив обіцянок (ітераційний) як вхідні дані. Він повертає єдиний Обіцяю який вирішується, коли всі проміси передано як ітератор, які вирішено, або коли ітератор не містить промізів. Простіше кажучи, якщо будь-яке з переданих обіцянок відхилено, Promise.all() метод асинхронно відхиляє значення промісу, яке вже було відхилено, незалежно від того, чи були вирішені інші проміси.

Синтаксис:



Promise.all( iterable )>

Параметри: Цей метод приймає один параметр ітерований який приймає масив обіцянки або звичайний масив, який містить деякі об’єкти.

Повернуті значення: Для повернення однієї обіцянки дотримуються певних правил:

  • Якщо переданий аргумент порожній, він повертає обіцянку, яка вже є вирішено .
  • Якщо переданий iterable не містить обіцянок, він повертає Promise, який вирішено асинхронно .
  • У всіх інших випадках він повертає незавершену обіцянку.

Виконання та відхилення методу Promise.all():



Виконання: Повернута обіцянка виконана,

  • Якщо переданий iterable порожній, тоді цей метод синхронно повертає обіцянку, яка вже вирішена.
  • Якщо всі передані обіцянки виконано, повернуті обіцянки виконуються асинхронно.
  • Тут успішне виконання цього конкретного методу повністю залежить від усіх обіцянок успішного виконання.

Відмова: Якщо будь-яке з переданих обіцянок відхилено, цей метод відхиляє значення цієї обіцянки, незалежно від того, чи було вирішено інші обіцянки. Іншими словами, якщо будь-яке обіцяння не виконується, метод Promise.all() поверне помилку, і він не враховуватиме, успішно виконано інші обіцянки чи ні.

Наведені нижче приклади ілюструють метод JavaScript Promise.all():



Приклад 1: Метод Promise.all() очікує виконання

javascript




p1 = Promise.resolve(50);> p2 = 200> p3 =>new> Promise(>function> (resolve, reject) {> >setTimeout(resolve, 100,>'geek'>);> });> Promise.all([p1, p2, p3]).then(>function> (values) {> >console.log(values);> });>

>

>

Вихід

[ 50, 200, 'geek' ]>

приклад 2: Тут метод Promise.all() вирішується через 2000 мс, і результат відображається як масив.

javascript




// Simple promise that resolves> // after a given time> const tOut = (t) =>{> >return> new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(`Completed>in> ${t}`)> >}, t)> >})> }> // Resolving a normal promise> tOut(1000).then(result =>console.log(результат +>' '>))> // Completed in 1000> // Promise.all> Promise.all([tOut(1000), tOut(2000)])> >.then(result =>console.log(результат)>

>

>

Вихід:

Completed in 1000 Completed in 1000, Completed in 2000>

тут, Promise.all() метод — це порядок підтримуваних обіцянок. Перший проміс у масиві буде дозволений до першого елемента вихідного масиву, другий проміс буде другим елементом у вихідному масиві, і так далі.

приклад 3: Ось , в Promise.all() метод чекає, поки всі обіцянки не будуть вирішені.

javascript




// Simple promise that resolves after a given time> const tOut = (t) =>{> >return> new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(`Completed>in> ${t}`)> >}, t)> >})> }> // Array contains some time duration> const durations = [1000, 2000, 3000]> const promises = []>// Empty array> durations.map((duration) =>{> >// Calling the async function timeout(), so> >// at this point the async function has started> >// and enters the 'pending' state> >// pushing the pending promise to an array.> >promises.push(tOut(duration))> })> console.log(promises)> // Passing an array of pending promises to Promise.all> // Promise.all will wait till all the promises get resolves> // and then the same gets resolved.> Promise.all(promises).then(response =>console.log(відповідь))> // It prints after previous promises gets resolved> // ['Completed in 1000', 'Completed in 2000', 'Completed in 3000']>

>

>

Вихід:

[object Promise], [object Promise], [object Promise] . . . (gap between previous and last promises) . . Completed in 1000, Completed in 2000, Completed in 3000>

Приклад 4: Як показано в цьому прикладі, якщо одна з обіцянок не виконується, то всі інші обіцянки не виконуються, і результат буде відображено на консолі у вигляді помилки. Потім Promise.all() метод відхиляється.

javascript




// Promise that resolves after a given time> const tOut = (t) =>{> >return> new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >if> (t === 2000) {> >reject(`Rejected>in> ${t}`)> >}>else> {> >resolve(`Completed>in> ${t}`)> >}> >}, t)> >})> }> const durations = [1000, 2000, 3000]> // Array contains some time durations> const promises = []>//empty array> durations.map((duration) =>{> >promises.push(tOut(duration))> >// Pushing durations in the promises array> })> // Passing an array of pending promises to Promise.all> Promise.all(promises).then(response =>console.log(відповідь))> >// Promise.all cannot be resolved, as one of the> >// promises passed, got rejected.> >.>catch>(error =>console.log(`::Error:: ${error}`))> // Promise.all throws an error.>

>

>

npm install команда

Вихід:

Error Rejected in 2000>

Приклад-5: У цьому прикладі ми будемо використовувати певну функцію таймера (зокрема, функцію setTimeout), яка містить різні таймери, і вони будуть записані всередині різних промісів, а потім ці проміси будуть передані всередину методів Promise.all(), щоб отримати результат.

Javascript




let first_promise =>new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(>'Resolved First after 1 second'>);> >}, 1000);> });> let second_promise =>new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(>'Resolved First after 2 seconds'>);> >}, 2000);> });> let third_promise =>new> Promise((resolve, reject) =>{> >setTimeout(() =>{> >resolve(>'Resolved First after 3 seconds'>);> >}, 3000);> });> try> {> >let result = Promise.all([first_promise, second_promise, third_promise]);> >result.then((data) =>console.log(дані));> }>catch> (error) {> >console.log(error);> }> // This code is contributed by Aman Singla...>

>

>

Вихід:

[  'Resolved First after 1 second',  'Resolved First after 2 seconds',  'Resolved First after 3 seconds' ]>

Підтримувані браузери:

Підтримувані браузери JavaScript Promise.all() методи перераховані нижче:

  • Google Chrome 32 і вище
  • Край 12 і вище
  • Firefox 29 і вище
  • Opera 19 і вище
  • Safari 8 і вище
  • Internet Explorer не підтримується