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

Обещания JavaScript объяснили

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

Что такое обещание в JavaScript?

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

var promise = new Promise(function(resolve, reject) {
  // do thing, then…

  if (/* everything worked */) {
    resolve("See, it worked!");
  }
  else {
    reject(Error("It broke"));
  }
});

Обещание существует в одном из этих государств

  • В ожидании: начальное состояние, не выполнено и не отклонено.
  • Выполнено: операция успешно завершена.
  • Отклонено: операция не удалась.

Объект обещания работает как прокси для значения, не обязательно известен, когда обещание создано. Это позволяет объединять обработчики с возможным успехом асинхронного действия или причиной неудачи.

Это позволяет асинхронным методам возвращает значения, такие как синхронные методы: вместо немедленно возвращая конечное значение, асинхронный метод возвращает обещание поставить значение в какой-то момент в будущем.

Используя «Тогда» (цепочка обещания)

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

Promise.resolve('some')
  .then(function(string) { // <-- This will happen after the above Promise resolves (returning the value 'some')
    return new Promise(function(resolve, reject) {
      setTimeout(function() {
        string += 'thing';
        resolve(string);
      }, 1);
    });
  })
  .then(function(string) { // <-- This will happen after the above .then's new Promise resolves
    console.log(string); // <-- Logs 'something' to the console
  });

Обещание API

В классе обещания есть 4 статические методы:

  • Обещание
  • Обещание.reject
  • Обещать. Все
  • Обещание

Обещания могут быть церованы вместе

При написании обещаний решить конкретную проблему, вы можете объединить их вместе, чтобы сформировать логику.

var add = function(x, y) {
  return new Promise((resolve,reject) => {
    var sum = x + y;
    if (sum) {
      resolve(sum);
    }
    else {
      reject(Error("Could not add the two values!"));
    }
  });
};

var subtract = function(x, y) {
  return new Promise((resolve, reject) => {
    var sum = x - y;
    if (sum) {
      resolve(sum);
    }
    else {
      reject(Error("Could not subtract the two values!"));
    }
  });
};

// Starting promise chain
add(2,2)
  .then((added) => {
    // added = 4
    return subtract(added, 3);
  })
  .then((subtracted) => {
    // subtracted = 1
    return add(subtracted, 5);
  })
  .then((added) => {
    // added = 6
    return added * 2;    
  })
  .then((result) => {
    // result = 12
    console.log("My result is ", result);
  })
  .catch((err) => {
    // If any part of the chain is rejected, print the error message.
    console.log(err);
  });

Это полезно для следующего Функциональное программирование парадигма. Создавая функции для манипулирования данными, вы можете объединить их вместе, чтобы собрать конечный результат. Если в любой точке в цепочке функций значение является Отклонено Цепь будет пропущена до ближайшего поймать () обработчик.

Для получения дополнительной информации о функциональном программировании: Функциональное программирование

Функциональные генераторы

В последние релизы JavaScript ввел больше способов в родомственным обещаниям. Один такой способ – генератор функции. Функциональные генераторы являются «приостановленными» функциями. При использовании с обещаниями генераторы могут сделать намного легче читать и отображаться «синхронно».

const myFirstGenerator = function* () {
  const one = yield 1;
  const two = yield 2;
  const three = yield 3;

  return 'Finished!';
}

const gen = myFirstGenerator();

Вот наш первый генератор, который вы можете увидеть по Функция * синтаксис. Ген Переменная, которую мы заявили, не будут работать MyFirstGenerator , но вместо этого будет «этот генератор готов к использованию».

console.log(gen.next());
// Returns { value: 1, done: false }

Когда мы бежим gen.next () Это будет опровергать генератор и продолжить. Так как это первый раз, когда мы позвонили gen.next () Он будет работать Урожай 1 и пауза, пока мы не позвоним gen.next () опять таки. Когда Урожай 1 называется, это вернется к нам ценность это было уступлено и ли генератор сделано Отказ

console.log(gen.next());
// Returns { value: 2, done: false }

console.log(gen.next());
// Returns { value: 3, done: false }

console.log(gen.next());
// Returns { value: 'Finished!', done: true }

console.log(gen.next());
// Will throw an error

Как мы продолжаем звонить gen.next () Он продолжит идти на следующий доходность и пауза каждый раз. Как только нет больше доходность Слева от остальной части генератора будет продолжаться, что в этом случае просто возвращает 'Законченный!' . Если вы звоните gen.next () Опять же, он бросит ошибку, так как генератор закончен.

Теперь представьте, если каждый урожай В этом примере был Обещание Сам код будет выглядеть чрезвычайно синхронно.

Обещание. Все (потенциал) очень полезен для нескольких запросов к другому источнику

Метод Prosoft.all (IteAleable) возвращает одно обещание, которое решает, когда все обещания в утечленном аргументе разрешаются или когда не содержит никаких обещаний. Он отвергает причину первого обещания, которое отвергает.

var promise1 = Promise.resolve(catSource);
var promise2 = Promise.resolve(dogSource);
var promise3 = Promise.resolve(cowSource);

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// expected output: Array ["catData", "dogData", "cowData"]

Больше информации о обещаниях:

  • Как JavaScript обещает на самом деле Работа
  • Как реализовать обещания в JavaScript
  • Как использовать обещания в JavaScript
  • Как написать обещание JavaScript

Оригинал: “https://www.freecodecamp.org/news/javascript-promises-explained/”