Від автора: зворотний виклик є асинхронним еквівалентом функції. Функція зворотного виклику викликається по завершенні виконання завдання. В Node js функції зворотного виклику використовуються для різних цілей. Всі API-інтерфейси Node написані таким чином, щоб вони підтримували зворотні дзвінки.
Наприклад, функція читання файлу може почати читання файлу і негайно повернути елемент управління в середу виконання, щоб можна було виконати наступну команду. Після завершення вводу-виводу даних викликається функція зворотного виклику і при цьому у неї передається вміст файлу як параметр. Таким чином вдається уникнути блокування виконання або очікування вводу/виводу файлів. Це робить Node.js високо масштабованим, так як він може обробляти велику кількість запитів, не чекаючи, поки яка-небудь функція поверне результати.
Приклад блокуючого виконання коду
Створіть текстовий файл з ім’ям input.txt з наступним вмістом:
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!
Створіть файл з ім’ям js main.js з таким кодом:
var fs = require(“fs”);
var data = fs.readFileSync(‘input.txt’);
console.log(data.toString());
console.log(“Program Ended”);
Тепер запустіть main.js:
$ node main.js
В результаті ми отримаємо наступне.
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!
Program Ended
Приклад коду неблокірующіх
Створіть текстовий файл з ім’ям input.txt з наступним вмістом.
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!
Змініть файл main.js наступним чином:
var fs = require(“fs”);
fs.readFile(‘input.txt’, function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log(“Program Ended”);
Тепер запустіть main.js:
$ node main.js
В результаті ми отримаємо наступне.
Program Ended
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!
Ці два приклади ілюструють концепцію блокуючих і неблокирующих викликів.
У першому прикладі програма блокує виконання до тих пір, поки не прочитає файл, і тільки після цього вона завершується.
У другому прикладі програма не очікує завершення зчитування файлу, а починає виводити «Program Ended», в той же час програма без блокування продовжує читання файлу.
Таким чином, блокує програма виконується строго послідовно. З точки зору програмування таку логіку реалізувати простіше, але неблокирующие програми не виконуються послідовно. У разі, якщо програмі необхідно використовувати будь-які дані, які обробляються, вона повинна зберігатися в одному блоці, щоб зробити її послідовною.