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

Помните Java Threads?!? :D

Многопоточность, демоны, асинхронное программирование всегда были предсмертной запиской для многих веб-разработчиков. Веб-разработчики Java стали веб-разработчиками Java, избегая необходимости иметь дело с потоками, как это делают разработчики Java Desktop (Swing, SWT и т. д.), разработчики Qt C++. Это один из самых сложных аспектов для начинающего разработчика. Но от асинхронного программирования никуда не деться, так или иначе вы застрянете или вам придется решать одну конкретную проблему, связанную с асинхронными задачами.

Хорошо, точно так же, как и в Java, многопоточность не может выполняться по порядку или гарантировать, что это произойдет, с другой стороны, Javascript сам по себе является многопоточным языком, конечно, он изначально был разработан для использования в браузере. Итак, опять же, от асинхронного программирования никуда не деться.

Если вы новичок в обратных вызовах и промисах и перед вами стоит задача решить много проблем с этим, я предлагаю держаться подальше от любых фреймворков «Promises», будь то фреймворк промисов для обработки транзакций в базе данных SQL или « волшебным образом связать процесс в Javascript. Просто поймите, как это работает, и вы получите полный контроль над своим кодом :)

Возьмем, к примеру, этот «обещанный» код:

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});
promise1.then(function(value) {
  console.log(value);
  // expected output: "Success!"
});

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

function myPromise() {
  let promise1 = new Promise ((resolve, reject) => {
    resolve('Success');
  }
  return promise1;
}
async myCall () {
  const promise = await myPromise();
   promise.then((value)=>{
     //result 'Success'
     console.log("result:", value);
  });
}

Более просто, чем поток Java, верно? :D

Обратные вызовы

На этот раз поговорим о обратных вызовах. Если вы знакомы с использованием интерфейсов с потоками Java, то это те области, к которым вы можете относиться, когда дело доходит до обратных вызовов. Тем не менее, Javascript снова стал намного проще в использовании, просто используя ключевое слово callback!

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

/**
** A simple function with a callback signature*/
function withCallback (callback) {
   const result = 'Success';
   callback(result);
}
//call here
withCallback ((result)=>{
   //output 'Success' 
   console.log(result);
});

Обратные вызовы — это способ для Javascript обрабатывать синхронные операции, потому что он всегда гарантирует последовательное выполнение, поскольку Javascript по своей природе асинхронен, многие разработчики будут съеживаться из-за «ада обратных вызовов». Но не беспокойтесь об этом слишком сильно, практика всегда сделает вас лучшим кодером.

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