Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,有没有方法阻止异常结束.some()或.forEach()循环?_Javascript_Loops_Exception - Fatal编程技术网

在Javascript中,有没有方法阻止异常结束.some()或.forEach()循环?

在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];

环境:Node.js,axios软件包

问题:在Javascript中,是否有方法阻止异常结束
.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()
块,但它仍然中断。我是否包装了错误的代码段?