在Javascript中,有没有方法阻止异常结束.some()或.forEach()循环?
环境:Node.js,axios软件包 问题:在Javascript中,是否有方法阻止异常结束在Javascript中,有没有方法阻止异常结束.some()或.forEach()循环?,javascript,loops,exception,Javascript,Loops,Exception,环境:Node.js,axios软件包 问题:在Javascript中,是否有方法阻止异常结束.some()或forEach()循环 背景:我正在使用some()循环来处理数组。在第一次匹配时,returntrue语句停止循环。循环内部是一个异步.get()请求。某些响应(包括错误响应)表示匹配。不幸的是,当抛出异常时,它会停止some()循环 (async () { let URLArray = [httpsWwwURL, httpsURL, httpWwwURL, httpURL];
.some()
或forEach()
循环
背景:我正在使用some()
循环来处理数组。在第一次匹配时,returntrue
语句停止循环。循环内部是一个异步.get()
请求。某些响应(包括错误响应)表示匹配。不幸的是,当抛出异常时,它会停止some()
循环
(async () {
let URLArray = [httpsWwwURL, httpsURL, httpWwwURL, httpURL];
let axiosResult = false;
let okResult = new RegExp('OK', 'i');
for (const element of URLArray) {
try {
const response = await axios.get(element);
if(String(response.status).includes('2')) axiosResult = true;
if(response.statusText.match(okResult)) axiosResult = true;
} catch (error) {
if(error.response !== undefined) axiosResult = true;
}
if (axiosResult) {
console.log('hooray, it worked');
break;
}
}
})();
示例:
const axios = require('axios');
let startURL = 'example.com';
let httpsWwwURL = `https://www.${ startURL }`;
let httpsURL = `https://${ startURL }`;
let httpWwwURL = `http://www.${ startURL }`;
let httpURL = `http://${ startURL }`;
let URLArray = [httpsWwwURL, httpsURL, httpWwwURL, httpURL];
let axiosResult = false;
let okResult = new RegExp('OK', 'i');
URLArray.some(async function(element) {
await axios.get(element)
.then(function(response) {
if(String(response.status).includes('2')) axiosResult = true;
if(response.statusText.match(okResult)) axiosResult = true;
})
.catch(function(error) {
if(error.response !== undefined) axiosResult = true;
})
.finally(async function() {
if(axiosResult === true) {
console.log('hooray it worked');
}
});
if(axiosResult === true) return true;
});
您的代码没有因为异常而提前结束,而是因为
而提前结束。某些无法与异步函数一起工作
它将为数组的第一个元素调用异步函数,然后异步函数将返回一个承诺。承诺是,因此。一些
会立即执行,并且不会移动到数组的第二个元素,即使承诺稍后解析为false
如果您的操作是异步的,您将无法使用.some
、.forEach
等。相反,您可以尝试为。。。属于
循环
(async () {
let URLArray = [httpsWwwURL, httpsURL, httpWwwURL, httpURL];
let axiosResult = false;
let okResult = new RegExp('OK', 'i');
for (const element of URLArray) {
try {
const response = await axios.get(element);
if(String(response.status).includes('2')) axiosResult = true;
if(response.statusText.match(okResult)) axiosResult = true;
} catch (error) {
if(error.response !== undefined) axiosResult = true;
}
if (axiosResult) {
console.log('hooray, it worked');
break;
}
}
})();
阻止异常阻止其中一个函数“停止”的方法是处理所有异常@Jaromanda X我在try/catch中包装了wait axios.get()
块,但它仍然中断。我是否包装了错误的代码段?