检查条件是否匹配数组中任何值的最佳方法是什么?
例如,如果接收到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做到这一点的最佳方法是什么?我可以没有循环吗?
答案 0 :(得分:4)
为什么不仅仅检查statusCode
是否在500和511之间(看起来是range)?数组过大。
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if(res.statusCode >= 500 && res.statusCode <= 511) {
process.stdout.write('HELLO!!!!!! ');
}
}));
答案 1 :(得分:1)
理想情况下,我想将所有5xx错误的内容放入列表或 数组,然后检查res.status代码是否等于5xx中的任何一个 错误代码。
您可以将df <- data.frame(id = c(1,2,3,4,5),
time = c(11, 22,33,44,55),
c = c(1,2,3,5,5),
e = c(4,2,5,4,NA))
attr(df$id,"label")<- "label"
attr(df$time,"label")<- "label2"
attr(df$c,"label")<- "something here"
attr(df$e,"label")<- "count of something"
str(df)
dfwide<- recast(df,id~variable +time,
id.var = c("id","time"))
for(i in (colnames(df))){
for(x in colnames(dfwide)[(grepl(i, colnames(dfwide)))])
mostattributes(dfwide[[x]]) <- attributes(df[[i]])
}
转换为字符串并检查其是否以5开头
statusCode
或者,您也可以使用对象文字来存储statusCode作为代码和相应的消息
var searchUserRequest = httpClient.request(searchUserRequestOptions, (res => {
if (res.statusCode.toString().startsWith('5')) {
process.stdout.write('HELLO!!!!!! ');
}
}));
另一种选择是将所有状态代码保存在地图中
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!!!!!! ');
}
}));
答案 2 :(得分:0)
如果需要与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!!!!!! ');
}
}));
如果确定不需要检查500s内的任何值,则可以按照“某些性能”建议使用500<= statusCode && statusCode < 600
或使用正则表达式:/^5\d{2}$/.test(statusCode)