Хороший вопрос.
Есть 2 ответа на ваш вопрос, в зависимости от поведения функции обратного вызова.
Во-первых, почему обратные вызовы?Обратные вызовы используются для выполнения различных операций одной и той же функцией в разных случаях использования.Пример после получения результата иногда нужно его отобразить, иногда нужно вставить его в базу данных.Наша функция заключается в том, чтобы просто получить результат и передать его в функцию обратного вызова для дальнейшего процесса.
Теперь ответьте на свой вопрос:
Да, можно использовать обратный вызовв if
состоянии.Это нормально, если обратный вызов является синхронной функцией.Как и при этом условии, мы хотим, чтобы наша функция передавала условие if
при различных обстоятельствах, например:
Пусть две функции sumOdd
и sumEven
, обе эти функции являются синхронными и sumOdd
возвращают суммудва числа, если сумма двух чисел нечетна, иначе верните false/0
, аналогично sumEven
для четной суммы двух чисел.
Код:
function sumOdd(a,b) {
if ( (a+b)%2 === 0 || typeof a !== 'number' || typeof b !== 'number') return false;
return a+b;
}
function sumEven(a,b) {
if ( (a+b)%2 !== 0 || typeof a !== 'number' || typeof b !== 'number') return false;
return a+b;
}
function main(cb) {
// let x, y be two random generated numbers of input from user
let x, y;
// after some operation let main call callback function
// main function don't care about what callback function do just its working is over.
return cb(x, y);
}
// Depending upon our requirement if we want to check for odd sum pass sumOdd as callback
if ( main(sumOdd) ) {
// This works for odd sum
}
if ( main(sumEven) ) {
// This works for even sum
}
Использование обратного вызова в приведенном выше примере полезно, поскольку оба обратных вызова являются синхронной функцией и сохраняют запись двух функций для функции main
просто для вызова 2 разных функций и отдыха все функции одинаковы.
Нет, использование обратного вызова в условиях if
неприемлемо, так как большинство функций обратного вызова используются, если вызывающая функция является асинхронной функцией, и большинство функций обратного вызова javascript вызывают другую функцию для отправки обратного ответа.
Пример обещания, вызовов API, вызовов базы данных, экспресс get
, post
и других функций, все вызывает другую функцию для отправки ответа.
```
new Promise ( (resolve, reject) => {
resolve('something'); // This is again calling a function
reject('something'); // Reject is also a function
});
app.get('/api', (req, res) => {
res.send('something') // res.send, res.json, res.end, res.write are all functions to send back response.
});
` ``
Подводя итог, можно использовать, если обратные вызовы являются синхронными и весь ваш код синхронен в состоянии if
.Нет, если есть какой-либо случай ада обратного вызова или асинхронных функций.
Предложил бы вам избежать такого случая, который может привести к callback hell
, если не поддерживается должным образом.