Как я могу объединить свои ошибки из пакета npm запроса?

Пока что у меня есть:

request(opts, function(err, response, body) {
  var user;
  if (err) {
    throw err;
  }
  if (response.statusCode !== 200) {
    throw 'Invalid statusCode';
  }
  if (body.status !== 'ok') {
    throw body.error;
  }
  return user = body.user;
});

Это кажется немного многословным, так есть ли способ объединить этот фрагмент кода?

1 ответ

Решение

Не очень много улучшений (больше похоже на гольф кода), но вот пример использования короткозамкнутых логических операторов для более краткого Javascript:

request(opts, function(err, response, body) {
    err = err || 
        (response.statusCode !== 200 && 'Invalid statusCode') ||
        (body.status !== 'ok' && (body.error || 'not ok'));

    if (err) throw err;

    return body.user;
});

Альтернативой может быть написание оболочки, которая объединяет для вас ошибки, если проблема заключается в одинаковой обработке ошибок в нескольких местах:

function request_wrapped(opts, callback) {

    request(opts, function(err, response, body) {
        if (!err && response.statusCode !== 200) {
            err = 'Invalid statusCode';
        }
        if (!err && body.status !== 'ok') {
            err = body.error;
        }
        callback(err, response, body);
    });
}

Затем вы бы призвать request_wrapped вместо request и просто проверьте err параметр в вашем обратном вызове, вот так:

request_wrapped(opts, function(err, response, body) {
    if (err) throw err;
    return body.user;
});
Другие вопросы по тегам