В этом 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, если вы хотите подписаться на меня, я буду очень признателен!
Спасибо 😊