Рубрики
Без рубрики

Обещания, обещания …

Ах! Обещания! Кто не знает радостей и разочарований, которые приходят с этими будущими ориентированными минусами … Теги с JavaScript.

Ах! Обещания! Кто не знает радости и разочарований, которые приходят с этими будущими ориентированными конструкциями – независимо от того, говорили ли мы о JavaScript обещаниях или их словесных коллегах человека! В конце концов, это весь вопрос, верно? Они не просто произвольно разделяют имя, но и ведут себя в значительной степени то же самое. Вот пример:

Предположим, как ребенок, мы не хотели ничего плохого, чем игровая консоль. Наш отец обещает выполнить нас нашему желанию и получить нам консоль на наш день рождения. После того, как указано, результаты этого обещания все еще ожидают – если наш отец является человеком его слова, и мы действительно будем держать объект желания в наших руках, когда наш день рождения приходит, обещание было выполнено. Должен ли он (возможно, под никоим нельзя недооценивать влияние матери), однако, не изменит его разум, обещание будет отклонено. В JavaScript обещания также всегда в одном из этих трех штатов: либо ожидают, выполненные или отклонены. Если бы мы были перевести пример сверху в код, это может выглядеть что-то подобное:

let isDadInfluencedByMum = false

let willIGetTheConsole = new Promise((resolve, reject) => {
  if(!isDadInfluencedByMum){
    const gameConsole = {
      brand: 'xbox',
      color: 'black'
    }
    resolve(gameConsole); // fulfilled
  }
  else{
    let reason = new Error('Oh no... Mum had a word with dad!')
    reject(reason) // rejected
  }
})

Должен ли отец оставаться в непосредственной близости от забот матери относительно приобретения игровой консоли, обещание будет сохранено и будет называться методом разрешения () объекта обещания. Способ устанавливает состояние обещания, выполненное со значением аргумента, приведенного им – в этом случае объект GameConsole. Однако, если матери произойдет ли матери с отцом до нашего дня рождения, может случиться, что ее влияние убедит его отказаться от идеи игровой консоли в конце концов и, следовательно, обещанию. В этом случае вызывается метод отклонения () по причине отторжения.

Теперь, когда наш день рождения ролится, и мы, наконец, получим открытие подарков, может произойти один из двух сценариев: либо обещание отца было выполнено, и мы находим новый черный Xbox в нашем владении, или мы должны понимать один раз Опять же, что матери всегда есть финал, говорят …

const openPresent = () => {
  willIGetTheConsole
    .then((fulfilled) => {
      console.log(fulfilled) // output: {brand: 'xbox', color: 'black}
    })
    .catch((error) => {
      console.log(error.message) // output: 'Oh no... Mum had a word with dad!'
    })
}

openPresent()

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

Возвращаясь к нашему примеру: после того, как отец обещал нам выполнить наше желание, мы бросаемся к нашим друзьям, чтобы сообщить о хороших новостях. Очевидно, что волнение и любопытство друзей так же большое, как и наше, поэтому мы обещаем им, что все играют с консолью на вечеринке по случаю дня рождения. Чтобы быть в состоянии сохранить это обещание, конечно, наш отец, конечно, должен выполнить свой первый. Давайте поставим наше обещание друзьям в код:

const letEveryonePlay = (gameConsole) => new Promise(
  (resolve) => {
    let invitation = `Hey, let's all play together with my new ${gameConsole.brand}!`
    resolve(invitation);
  }
)

Теперь мы собираемся цепи две обещания вместе. Мы можем сделать это с помощью метода тогда (). Сначала мы должны ждать и посмотреть, сохранил ли отец своего обещания, и мы на самом деле получили игровую консоль, только тогда мы можем выполнить наше обещание друзьям:

const openPresent = () => {
  willIGetTheConsole
    .then(letEveryonePlay)
    .then((fulfilled) => {
      console.log(fulfilled) // output: "Hey, let's all play together with my new xbox!"
    })
    .catch((error) => {
      console.log(error.message) // output: 'Oh no... Mum had a word with dad!'
    })
}

openPresent()

Как только мы наконец-то пришлось отрываться от обертывающей бумаги и обнаружить игровую консоль, мы сможем выполнить наше обещание и пригласить всех наших друзей, чтобы играть с ним. Выполненное обещание WilliGetTheConsole Возвращает GameConsole объект, который мы тогда используем в ЛОСИТЕЛЬНОЕОПЛЕНИЕ Обещайте получить бренд консоли, чтобы вернуть правильное сформулированное сообщение приглашения, которое мы можем затем распечатать, как только обещание ЛОСИТЕЛЬНОЕОПЛЕНИЕ был выполнен.

Если нынешнее содержать что-то еще, хотя причина, по которой мы должны разочаровать наших друзей, скорее всего, будет таким же, как раньше – голос причина размышления о том, и отец осложнил.

Я надеюсь, что этот небольшой пример смог помочь одному или другому в понимании того, как использовать обещания JavaScript. Даже если вы не обязательно столкнулись с проблемой необходимости дождаться «ОК» от ваших родителей, чтобы больше добраться до игровой консоли, они просто подходят, например, E.g. Чтобы убедиться, что полный набор данных возвращается до дальнейшей обработки его или хранения кода для расстегления файлов в проверке, пока они не будут полностью загружены. Независимо от случая использования, благодаря их «цепочтимости», обещания, безусловно, являются гораздо более читаемым и элегантным решением для группы глубоко вложенных функций обратного вызова, и как только вы получите голову, как они работают, вы не захотите их пропустить.

Обещать!

Оригинал: “https://dev.to/schlenges/promises-promises-37ff”