Я пишу функцию JavaScript, которая делает запрос HTTP и возвращает обещание для результата (но этот вопрос в равной степени относится к реализации на основе обратного вызова).
Если я сразу знаю, что аргументы, предоставленные для функции, являются недопустимыми, должна ли функция throw
синхронно или должна возвращать отклоненное обещание (или, если хотите, вызывать обратный вызов с экземпляром Error
)?
Насколько важно, чтобы асинхронная функция всегда вела себя асинхронно, особенно для условий ошибки? Можно ли использовать throw
, если вы знаете, что программа не находится в подходящем состоянии для продолжения операции async?
например:
function getUserById(userId, cb) {
if (userId !== parseInt(userId)) {
throw new Error('userId is not valid')
}
// make async call
}
// OR...
function getUserById(userId, cb) {
if (userId !== parseInt(userId)) {
return cb(new Error('userId is not valid'))
}
// make async call
}