Я пытаюсь создать функцию с помощью node.js, которая проверяет хэш онлайн-файла, чтобы увидеть, был ли он изменен. Каждый раз, когда я вызываю свою функцию, она всегда возвращает значение undefined. Я понимаю, что проблема связана с асинхронными функциями, но я не совсем понимаю, как они работают.
const crypto = require("crypto")
const request = require("request")
function checkHash(url, hash) {
request.get(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
if (crypto.createHash('md5').update(body).digest("hex") !== hash) {
return true;
} else {
return false;
}
}
});
}
Вы не можете возвращать «значения» из асинхронных функций. Вместо этого вы должны вызвать функцию обратного вызова с требуемым значением или ошибкой. Вы должны пройти базовые руководства по Javascript.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Будучи асинхронным вызовом, вы должны предоставить способ вернуть возвращаемое значение. Возможный подход - использование callbacks, как показано ниже:
const crypto = require("crypto")
const request = require("request")
function checkHash(url, hash, callback) {
request.get(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
if (crypto.createHash('md5').update(body).digest("hex") !== hash) {
return callback(null, true);
} else {
return callback(null, false);
}
}
return callback(error);
});
}
затем вызовите chechHash, передав функцию в качестве аргумента:
checkHash(url, hash, function(err, response) {
if (err) return console.info(err);
//response is here
})
Вы не возвращаете никакого значения. Проверьте обещания в JS.