检查一个条件是否与数组中的任何值匹配的最佳方法是什么?
因此,例如,如果接收到5xx错误,我希望实现重试逻辑。
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if(res.statusCode === 500 || res.statusCode === 501 || res.statusCode === 502) {
process.stdout.write('HELLO!!!!!! ');
}
}));理想情况下,我希望将所有5xx错误放在一个列表或数组中,然后检查res.status代码是否等于5xx错误代码中的任何一个。
在Javascript中,最好的方法是什么?我不需要循环就能这么做吗?
发布于 2019-03-26 10:35:15
为什么不直接检查一下statusCode是否在500到511之间(这看起来是范围)?数组是过火的。
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if(res.statusCode >= 500 && res.statusCode <= 511) {
process.stdout.write('HELLO!!!!!! ');
}
}));发布于 2019-03-26 10:42:04
理想情况下,我希望将所有5xx错误放在一个列表或数组中,然后检查res.status代码是否等于5xx错误代码中的任何一个。
您可以将statusCode转换为字符串,并检查它是否以5开头。
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if (res.statusCode.toString().startsWith('5')) {
process.stdout.write('HELLO!!!!!! ');
}
}));
或者,您也可以使用aobject文字将statusCode存储为代码和相应的消息。
let statusCodes = {
501: 'someMsg for 501',
502: 'someMsg for 502',
503: 'someMsg for 503',
}
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if (statusCodes[res.statusCode]) {
process.stdout.write('HELLO!!!!!! ');
}
}));
另一种选择是将所有状态代码保存在Map中
var statusCodesMap = new Map();
statusCodesMap.set(501, "value associated with 'a 501'");
statusCodesMap.set(502, 'value associated with 502');
statusCodesMap.set(503, 'value associated with 503');
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if (statusCodesMap.get(res.statusCode)) {
process.stdout.write('HELLO!!!!!! ');
}
}));
发布于 2019-03-26 10:40:04
如果需要与ES5兼容的代码,可以使用Array#indexOf (返回数组中元素的索引,如果数组中不存在-1 ),例如:
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if([500, 501, 502].indexOf(res.statusCode) !== -1) {
process.stdout.write('HELLO!!!!!! ');
}
}));如果你可以使用ES7,你可以使用Array#includes
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if([500, 501, 502].includes(res.statusCode)) {
process.stdout.write('HELLO!!!!!! ');
}
}));如果您确信不需要检查500 s中的任何值,您可以使用500<= statusCode && statusCode < 600作为CertainPerformance的建议,或者使用正则表达式:/^5\d{2}$/.test(statusCode)。
https://stackoverflow.com/questions/55354982
复制相似问题