Обратный вызов является асинхронным эквивалентом для функции. Функция обратного вызова вызывается при завершении данной задачи. Узел интенсивно использует обратные вызовы. Все 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!!!!!
Эти два примера объясняют концепцию блокирующих и неблокирующих вызовов.
-
В первом примере показано, что программа блокируется до тех пор, пока не прочитает файл, и только затем она продолжит выполнение программы.
-
Второй пример показывает, что программа не ждет чтения файла и продолжает печатать «Программа завершена», и в то же время программа без блокировки продолжает чтение файла.
В первом примере показано, что программа блокируется до тех пор, пока не прочитает файл, и только затем она продолжит выполнение программы.
Второй пример показывает, что программа не ждет чтения файла и продолжает печатать «Программа завершена», и в то же время программа без блокировки продолжает чтение файла.
Таким образом, блокирующая программа выполняется очень последовательно. С точки зрения программирования проще реализовать логику, но неблокирующие программы не выполняются последовательно. В случае, если программе необходимо использовать какие-либо данные для обработки, они должны храниться в одном и том же блоке для последовательного выполнения.