В этом 2020 году у JavaScript для нас появятся новые удивительные вещи, здесь, в этой статье, я покажу вам 2 из них, которые вы можете использовать сегодня в своей консоли Chrome или в своем любимом проекте.

Promise.allSettled

Представьте, что у вас есть два таких обещания:

const p1 = new Promise((resolve, reject) => setTimeout(()=> resolve(), 500))
const p2 = new Promise((resolve, reject) => setTimeout(()=> reject(), 600))

Итак, p1 разрешится через 500 миллисекунд, а p2 - наоборот.

У нас есть метод под названием Promise.all (), который получает массив обещаний и в случае неудачи будет выполнен метод catch. 🛑

Promise.all( [p1, p2] )
  .then( res => console.log('Great') )
  .catch(err => console.log('An error has occurred') );
// result -> 'An error has occurred'

Почему? потому что p2 не удалось.

Теперь мы можем использовать метод под названием Promise.allSettled, который делает обратное, например: ✅

Promise.allSettled( [p1, p2] )
  .then( res => console.log('Great') )
  .catch(err => console.log('An error has occurred') );
// result -> 'Great'

Еще одна замечательная вещь allSettled заключается в том, что мы можем проверять состояние каждого из них, независимо от результата:

Promise.allSettled([p1, p2])
 .then( results => 
    results.forEach(result => console.log(result.status) ) )
/* result -> 
    "fulfilled" 
    "rejected" */

Недвижимость частного класса

Во-вторых, теперь у нас есть частные свойства в наших классах (да, синтаксис сахара)

class Person {
  name = 'Sherman';
  #age = 20;
}
const person = new Person();
console.log( person.name );
// result -> Sherman

Во-первых, что это за «#»? Этот символ перед именем - это способ, которым мы должны определить в нашем классе наши частные переменные.

Если мы попытаемся сделать:

console.log( person.#age );
// result -> Private field '#age' must be declared in an enclosing class

При этом, если хотите, вы можете использовать геттеры для возврата своей частной собственности:

class Person {
  name = 'Sherman';
  #age = 20;
  get age() {
   return this.#age; 
  }
}
const person = new Person();
console.log( person.age );
// result -> 20

Надеюсь, вам понравилось!

У вас есть мой Github, если вы хотите подписаться на меня, я буду очень признателен!

Спасибо 😊