到目前为止,我有:
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;
});
这看起来有点冗长,有没有办法整合这段代码?
答案 0 :(得分: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;
});