Здравствуйте. Изучаю JS и NodeJS.
Когда нужно возвращать значения через колбек, а когда через return?
Рассмотрим пример:
function save(user, cb) {
if (!user) {
throw new Error('user не передан');
}
if (typeof user !== 'object' || user === null) {
throw new Error('user должен быть объектом');
}
if (!cb) {
throw new Error('колбек не передан');
}
if (typeof cb !== 'function') {
throw new Error('колбек должен быть функцией');
}
validate(user, function(err, user) {
if (err) {
return cb(err);
}
prepare(user, function(err, user) {
if (err) {
return cb(err);
}
insert(user, function(err, id) {
if (err) {
return cb(err);
}
return cb(null, id);
});
});
});
}
Эта функция сохраняет документ user в бд. Алгоритм работы:
Как видно, каждая функция получает колбек, который вызывает по окончанию своей работы. В колбеке передается ошибка, либо данные.
Вопрос: я не могу понять когда мне нужно использовать обратный вызов, а когда можно просто возвращать значения через оператор return?
Дополнительно пример реализации функции prepare:
/**
* Добавляет необходимые поля
*/
function prepare(user, cb) {
user.initials = (user.firstName[0] + user.lastName[0]).toUpperCase();
user.project = [];
user.dialogs = [];
user.locked = false;
encryptPassword(user.password, function(hashedPassword) {
user.hashedPassword = hashedPassword;
delete user.password;
cb(null, user);
});
}
/**
* Хеширует пароль
*/
function encryptPassword(password, cb) {
const salt = Math.random() + '';
const hashedPassword = crypto.createHmac('sha1', salt).update(password).digest('hex');
cb(hashedPassword);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Мне нужно так чтобы если скролят вверх выполнялась одна функция а при скролле вниз, другаяЕсть ли такое событие?
При клике на кнопку с классом remove нужно получить id формы, в которой находится именно эта кнопкаВот код с двумя формами (Две одинаковые формы...
Функция updateList вызывается каждый раз при изменении поля input, получая event в качестве аргументаКак сбросить интервал запроса reqFn внутри updateList,...