Должен ли асинхронный API когда-либо генерировать синхронно?

Я пишу функцию JavaScript, которая делает HTTP-запрос и возвращает обещание результата (но этот вопрос в равной степени относится к реализации на основе обратного вызова).

Если я сразу знаю, что аргументы, предоставленные для функции, являются недействительными, должна ли функцияthrow синхронно, или он должен вернуть отклоненное обещание (или, если вы предпочитаете, вызвать обратный вызов сError экземпляр)?

Насколько важно, чтобы асинхронная функциявсегда вести себя асинхронно, особенно в случае ошибок? Это нормально дляthrow Если вы знаете, что программа не находится в подходящем состоянии для выполнения асинхронной операции?

например:

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
}

Ответы на вопрос(3)

Ваш ответ на вопрос