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

Обратные вызовы и обещания, живущие вместе в API Harmony

В этой статье мы узнаем, как обновить API на основе обратного вызова для поддержки обещаний. Во-первых, что такое интерфейс программирования API или приложений? Это иногда называют модулем. Это коллекция методов и развратных разработчиков может использовать в своем собственном применении. Смотреть сопровождающее

Автор оригинала: Ethan Arrowood.

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

Во-первых, что такое интерфейс программирования API или приложений? Это иногда упоминается как модуль Отказ Это коллекция методов и развратных разработчиков может использовать в своем собственном применении.

Смотреть сопровождающее настоящий кодирующий эпизод здесь Отказ

Функции обратного вызова

Многие JavaScript API и модули обеспечивают окончательный параметр в своих методах для чего-то, называемого методом обратного вызова. В большинстве случаев вы увидите это, как сделано , Следующий , Обратный вызов или CB (аббревиатура для обратного вызова). Функции обратного вызова невероятно полезны, потому что они позволяют другим разработчикам получить больше из ваших функций, таких как обработка ошибок и асинхронные запросы.

Например, метод API может производить различные ошибки и эти ошибки, если он не обрабатывается надлежащим образом, может снизить целое приложение. API Использование методов обратного вызова Должен возвращать все Ошибка . Объекты в качестве первого параметра в обратном вызове. Предполагается, что первый параметр в функции обратного вызова всегда является экземпляром ошибок.

Функция ниже представляет собой простой пример. Его цель – удвоить параметр х и вернуть его через указанный Перезвоните функция. Ошибка . Начинается как нулевой . Если какой-либо из условных проверок не удается, Ошибка . Экземпляр назначен Ошибка . Отказ Тогда если Ошибка . существует (это не нулевой или неопределенный), то мы не удвоили х И мы устанавливаем переменную Двойной как null ; В противном случае х удваивается и назначен на Двойной Переменная. После того, как все сделано функция Духовитно вернет метод обратного вызова с первым параметром, ссылающимся на Ошибка . Переменная и второй параметр, ссылающийся на Двойной Переменная.

function doublePositiveOnly(x, callback) {
  let error
  if ( !x )
    error = new Error('x must be defined')
  if ( typeof x !== 'number' )
    error = new Error('x must be a number')
  if ( x < 0 )
    error = new Error('x must be positive')
    
  const double = error ? null : x * 2
  
  return callback(error, double)
}

Как бы вы использовали эту функцию?

doublePositiveOnly(16, function (err, result) {
  if (err) console.error(err.message)
  console.log(result)
})

Обещание функций

Обещающие функции в производстве легко распознать, как они используют .then и .catch Методы для возврата информации обратно пользователю. Почти все функции обратного вызова могут быть заменены обещаниями, поэтому давайте перестроим нашу Духовитно Метод с использованием обещаний.

function doublePositiveOnly( x ) {
  return new Promise(function (resolve, reject) {
    let error
    if ( !x )
      error = new Error('x must be defined')
    if ( typeof x !== 'number' )
      error = new Error('x must be a number')
    if ( x < 0 )
      error = new Error('x must be positive')
      
    error ? reject(error) : resolve(x * 2)
  })
}

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

doublePositiveOnly(16).then(function (result) {
  // do cool stuff with the result
  console.log(result)
}).catch(function (err) {
  // oh no an error! Handle it however you please
  console.error(err.message) 
})

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

Обратные вызовы и обещания вместе

У нас есть обратные вызовы, и у нас есть обещания. Они взаимозаменяемы, и оба удовлетворяют аналогичные потребности. Теперь рассмотрим сценарий, в котором у нас есть API, который поддерживает только методы обратного вызова. Эта API загружается 1000x раз и в настоящее время работает в производстве на бесчисленные применения. Но теперь сопровождающий хочет поддержать обещания. Могут ли они сделать это, одновременно поддерживая поддержку обратного вызова? ДА!

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

function doublePositiveOnly(x, callback) {
  const func = this.doublePositiveOnly
  
  if ( callback === undefined ) {
    return new Promise(function (resolve, reject) {
      func(x, function (err, result) {
        err ? reject(err) : resolve(result)
      })
    })
  }
  
  let error
  if ( !x )
    error = new Error('x must be defined')
  if ( typeof x !== 'number' )
    error = new Error('x must be a number')
  if ( x < 0 )
    error = new Error('x must be positive')
  
  const double = error ? null : x * 2
  
  return callback(error, double)
}

И так же, как Духовитно Способ теперь поддерживает обещания. Это работает, потому что сначала он хранит ссылку на функцию в Func Переменная. Далее он проверяет, был ли переведен обратный вызов к функции. Если нет, это возвращает обещание, которое передается по х Параметр другому Духовитно Вызов, и он включает в себя функцию обратного вызова. Эта функция обратного вызова либо отвергает или решает Обещание, как только реализация только для обещания.

Что отлично в этом решении, вы можете использовать практически в любом месте, и вам не нужно редактировать какие-либо части оригинальной функции! Вы можете увидеть его в действии в модуле, который я недавно внес вклад в Runge Застеживать – JWT Отказ Оба Запрос пересматривать и Replysign Методы поддерживают как обратные вызовы, так и обещания.

Если у вас есть какие-либо вопросы, пожалуйста, обратитесь к!

Вы можете следовать за мной на Github и Twitter или проверить мой Сайт Отказ

Продолжайте хорошую работу.

~ Итан Arrowood

Оригинал: “https://www.freecodecamp.org/news/callbacks-and-promises-living-together-in-api-harmony-7ed26204538b/”