Обратные вызовы и обещания
Помните 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 по своей природе асинхронен, многие разработчики будут съеживаться из-за «ада обратных вызовов». Но не беспокойтесь об этом слишком сильно, практика всегда сделает вас лучшим кодером.
Обещания и ответные звонки связаны с любовной жизнью; обещания сделаны для того, чтобы их нарушать, обратные вызовы гарантированы, и в интересах всех использовать их обоих. :)