Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Tôi có một vòng lặp foreach kiểm tra xem có điều kiện trước khi đẩy dữ liệu vào mảng không:

allow(id, perm, arr) {
  const data = { "userId": id, "permissionId": perm };

  arr.forEach(key => {
    if (id !== key.userId) {
      throw new Error('id does not exists');
    } else {
      if (perm === key.permissionId) {
        throw new Error('perm exists in this id');
      } else {
        arr.push(data);
      }
    }
  });
}

Mảng ban đầu arr là như thế này:

[{"userId": 1,"permissionId": 1},
 {"userId": 2,"permissionId": 1},
 {"userId": 3,"permissionId": 0},
 {"userId": 4,"permissionId": 0}]

Nếu tôi sử dụng

[{"userId": 1,"permissionId": 1},
 {"userId": 2,"permissionId": 1},
 {"userId": 3,"permissionId": 0},
 {"userId": 4,"permissionId": 0}]
0 tất cả các hoạt động, nhưng khi tôi đưa ra lỗi, việc thực thi dừng lại, nhưng làm thế nào tôi có thể quản lý các ngoại lệ mà không cần ngừng lặp lại?

Blog / JavaScript

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Trong bài đăng này, chúng tôi đề cập đến mọi thứ bạn cần biết về cách phá vỡ vòng lặp JavaScript, các lựa chọn thay thế, lỗi, cách hành động tốt nhất và hơn thế nữa.

Trong bài đăng này, chúng tôi sẽ đề cập đến cách phá vỡ một vòng lặp JavaScript với càng ít thuật ngữ kỹ thuật càng tốt để bạn sẽ có mọi thứ bạn cần ngay tại đây mà không cần phải nhìn xa hơn nữa!

Không thể phá vỡ một vòng lặp JavaScript theo nghĩa thông thường, vậy thay vào đó bạn nên làm gì?

Trong bài đăng này, chúng tôi sẽ đề cập đến mọi thứ bạn cần biết về cách phá vỡ vòng lặp JavaScript cũng như các lựa chọn thay thế.

Bắt đầu nào!

Cách phá vỡ vòng lặp JavaScript

Nếu bạn cần dừng hoặc thực hiện ngắt trong vòng lặp JavaScript trong bài.

Array.Prototype.foreach được thiết kế để lặp qua mọi mục trong một mảng một lần trong khi cung cấp cho bạn mục mảng, chỉ mục và mảng đầy đủ trong một cuộc gọi lại mà bạn cung cấp.

Bởi vì điều này không có cách nào để thoát ra khỏi nó.

Nếu bạn đã cố gắng sử dụng một câu lệnh ngắt trong vòng lặp foreach thì bạn sẽ gặp lỗi. một hàm (ngay cả khi hàm nằm bên trong vòng lặp).

Đây là một ví dụ về lỗi:

[1, 2, 3].forEach(a => {
  console.log(a)
  break
})
// Uncaught SyntaxError: Illegal break statement

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Với tất cả những gì đã nói, chúng tôi có một vài lựa chọn về cách sao chép một lần phá vỡ trong vòng lặp JavaScript nếu bạn vẫn cần tìm cách phá vỡ vòng lặp foreach.

Cách phá vỡ vòng lặp JavaScript bằng cách sử dụng một ngoại lệ

Một tùy chọn là ném một ngoại lệ với cuộc gọi lại mà bạn chuyển vào chức năng Array.Prototype.Foreach.

Bằng cách này, bạn sẽ gây ra lỗi sẽ dừng tất cả các quy trình trong ứng dụng JavaScript của bạn.

Bởi vì bạn không muốn toàn bộ ứng dụng của mình dừng lại, chúng tôi sẽ cần phải quấn mảng. bản tường trình.

Trước khi chúng ta vào ví dụ, điều này thực sự không lý tưởng và như tôi đã nói khi bắt đầu nếu bạn cần thoát ra khỏi một vòng lặp thì lựa chọn tốt nhất của bạn là không sử dụng foreach và thay vào đó sử dụng một vòng lặp để phá vỡ, hoặc mảng Phương pháp .prototype.some.

Dưới đây là ví dụ về cách sử dụng ném lỗi để phá vỡ vòng lặp JavaScript:

const breakFE = () => {
  throw new Error("BREAK_FE")
}

const handleBreakFEError = e => {
  if (e.message !== "BREAK_FE") {
    throw e
  } else {
    console.log("javascript foreach break!")
  }
}

try {
  [1, 2, 3].forEach(item => {
    if (item > 1) {
      breakFE()
    }
    console.log(item)
  })
} catch (e) {
  handleBreakFEError(e)
}
// 1
// javascript foreach break!

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Bạn có thể tiến thêm một bước này và tạo chức năng trợ giúp, hoặc thậm chí sửa đổi chính đối tượng mảng, nhưng nói chung bạn không nên làm điều này và có rất ít lý do để làm điều đó.

Đây là cách mà nó có thể trông mặc dù:

Array.prototype.forEachWithBreak = function(callback) {
  const breakFE = () => {
    throw new Error("BREAK_FE")
  }

  const handleBreakFEError = e => {
    if (e.message !== "BREAK_FE") {
      throw e
    } else {
      console.log("javascript foreach break!")
    }
  }

  try {
    this.forEach((...args) => callback(...args, breakFE))
  } catch (e) {
    handleBreakFEError(e)
  }
}


[1, 2, 3].forEachWithBreak((item, index, arr, breakFE) => {
  console.log(item, index)
  breakFE()
})
// 1 0
// javascript foreach break!

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Cách phá vỡ vòng lặp JavaScript bằng cách sử dụng câu lệnh IF và trả về

Bạn có thể thực sự phá vỡ một vòng lặp JavaScript bằng cách sử dụng câu lệnh IF vì nó vẫn sẽ thực hiện tất cả các lần lặp trên mảng của bạn.

Nhưng bạn có thể giảm mạnh lượng công việc xảy ra trên mỗi lần lặp.

Nếu bạn đang thực hiện một lượng lớn các tính toán trên mỗi lần lặp của vòng lặp foreach của bạn, trong khi không hoàn hảo, bạn có thể sử dụng một câu lệnh IF để giảm thiểu việc thực hiện công việc đó hơi giống như gọi điện tiếp tục trên mỗi lần lặp.

Dưới đây là một ví dụ về cách bạn có thể sử dụng câu lệnh IF để bỏ qua các tính toán trong vòng lặp foreach:

let breakFe = false;

[1, 2, 3].forEach(item => {
  if (item > 1) {
    return
  }
  console.log(item)
})

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Như bạn có thể thấy điều này hoạt động bằng cách chỉ quay trở lại khi bắt đầu mỗi lần lặp để giữ cho công việc tính toán càng tối giản nhất có thể bằng cách ngăn chặn bất kỳ mã nào được chạy trong cuộc gọi lại của bạn.

Điều này khác xa với lý tưởng, và sẽ tốt hơn nếu sử dụng một phương pháp có thể cho phép bạn thoát ra hoặc sử dụng một vòng lặp.

Các lựa chọn thay thế cho một lần phá vỡ JavaScript

Có một vài lựa chọn chúng tôi có thể sử dụng cho các lựa chọn thay thế cho vòng lặp foreach trong JavaScript và chúng là giải pháp tốt nhất nếu bạn cần thoát ra khỏi một vòng lặp foreach.

Sử dụng một vòng lặp thay thế cho một vòng lặp foreach để phá vỡ

Người đầu tiên, và một cá nhân tôi muốn giới thiệu trong tình huống này, sẽ là đi với một tiêu chuẩn cho câu lệnh Loop và Break.

Tôi có một bài viết đầy đủ về cách bạn có thể thoát ra khỏi một vòng lặp ở đây.

Dưới đây là một ví dụ về cách bạn có thể sử dụng một vòng lặp để phá một vòng lặp:

const myArray = [1, 2, 3];

for (let i = 0; i < myArray.length; i += 1) {
  const arrayItem = myArray[i]

  if (arrayItem > 1) {
    break
  }

  console.log(arrayItem, i, myArray)
}

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Như bạn có thể thấy trong ví dụ trên, với rất ít công việc, chúng tôi có thể nhận được vòng lặp để thực hiện chính xác những gì Foreach Loop làm cho chúng tôi ngoại trừ từ bây giờ chúng tôi có thể sử dụng câu lệnh Break để thoát ra các lần lặp bổ sung.

Sử dụng một vòng lặp trong thời gian thay thế cho một vòng lặp foreach để phá vỡ

Một vòng lặp trong thời gian về cơ bản là nguyên tắc tương tự như vòng lặp ngoại trừ bạn không xác định chỉ số trong phạm vi vòng lặp.

Dưới đây là một ví dụ về cách bạn có thể sử dụng vòng lặp trong khi thay thế cho vòng lặp foreach để phá vỡ:

const myArray = [1, 2, 3];
let index = 0;

while (index < myArray.length) {
  const arrayItem = myArray[index]

  if (arrayItem > 1) {
    break
  }

  console.log(arrayItem, index, myArray)

  index += 1
}

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Sử dụng một mảng.prototype.some thay thế cho vòng lặp foreach để phá vỡ

Giải pháp thay thế cuối cùng mà bạn có thể sử dụng cho một vòng lặp foreach để thực hiện một loại phá vỡ là phương thức mảng.prototype.some.

Bạn vẫn giành chiến thắng có thể gọi câu lệnh Break từ bên trong nó, nhưng thay vào đó, bạn có thể trả lại một boolean từ cuộc gọi lại của mình mà một vòng lặp sẽ sử dụng như một chỉ số để dừng lặp lại qua các mục mảng.

Mục đích ban đầu của phương thức mảng.prototype.some là để biết liệu một mục tồn tại trong một mảng, nếu phương thức sẽ trả về true hay không, nếu không thì nó sẽ trả về sai.

Chúng ta có thể sử dụng điều này để tạo ra một chức năng giống như phá vỡ bằng cách trả về True trong cuộc gọi lại của chúng ta khi chúng ta muốn mô phỏng một tuyên bố phá vỡ.

Dưới đây là một ví dụ về cách sử dụng một số phương thức để phá vỡ một vòng lặp:

[1, 2, 3].some(a => {
  console.log(a)
  return true
})
// 1
// true

Hướng dẫn throw error inside foreach javascript - ném lỗi bên trong javascript foreach

Bản tóm tắt

Để tóm tắt bài đăng này bằng một vài từ, nếu bạn cần thoát khỏi mảng javascript.prototype.foreach thì bạn không nên sử dụng mảng javascript.prototype.foreach và thay vào đó bạn nên sử dụng một vòng lặp hoặc mảng. Phương pháp nguyên mẫu.

Ở đó chúng tôi có cách phá vỡ một vòng lặp JavaScript, nếu bạn muốn nhiều hơn như thế này, hãy chắc chắn kiểm tra một số bài viết khác của tôi!

Tôi hy vọng bài đăng này đã có ích, nhưng trước khi bạn đi, hãy chắc chắn rằng bạn thử bài kiểm tra tương tác thú vị của tôi để xem bạn là một kỹ sư React mới, trung cấp hoặc chuyên gia.try my fun interactive quiz to see if you are a novice, intermediate, or expert React engineer.

Sẽ chỉ mất khoảng 1 - 3 phút, vì vậy bạn không có gì để mất, hãy kiểm tra khả năng của mình ngay bây giờ.1 - 3 minutes, so you have nothing to lose, test your abilities now.

Làm bài kiểm tra.

Bạn có phải là Kỹ sư React Novice, Trung cấp hoặc Chuyên gia?

Tìm ra ở đây bằng cách thực hiện bài kiểm tra vui vẻ, tương tác, nhanh chóng của tôi, mất khoảng 1 - 3 phút. Bạn sẽ làm tốt như thế nào?fun, interactive, quick quiz which takes approximately 1 - 3 minutes. How well will you will do?

Một số đồ họa được sử dụng trên bài đăng này đã được thực hiện bằng các biểu tượng từ Flaticon.

Làm thế nào để bạn phá vỡ một vòng lặp trong foreach?

Không có cách nào để dừng hoặc phá vỡ vòng lặp foreach () ngoài việc ném một ngoại lệ. Nếu bạn cần hành vi như vậy, phương thức foreach () là công cụ sai.throwing an exception. If you need such behavior, the forEach() method is the wrong tool.

Chúng ta có thể sử dụng tiếp tục trong foreach javascript không?

Để tiếp tục trong một vòng lặp JavaScript, bạn không thể sử dụng câu lệnh tiếp tục vì bạn sẽ gặp lỗi.Thay vào đó, bạn sẽ cần sử dụng câu lệnh trả lại thay cho câu lệnh tiếp tục vì nó sẽ hành động theo cùng một cách khi sử dụng foreach vì bạn chuyển trong một cuộc gọi lại vào câu lệnh foreach.you can't use the continue statement because you will get an error. Instead you will need to use the return statement in place of the continue statement because it will act in the same way when using a forEach because you pass in a callback into the forEach statement.

Làm thế nào để bạn thoát ra khỏi Foreach TypeScript?

Để phá vỡ vòng lặp foreach () trong TypeScript, ném và bắt lỗi bằng cách kết thúc phương thức gọi cho foreach () trong một khối thử/bắt.Khi lỗi được ném, phương thức foreach () sẽ dừng lặp lại trong bộ sưu tập.Đã sao chép!throw and catch an error by wrapping the call to the forEach() method in a try/catch block. When the error is thrown, the forEach() method will stop iterating over the collection. Copied!

Làm thế nào để bạn phá vỡ một vòng lặp foreach trong React Native?

Làm thế nào để thoát ra khỏi một vòng lặp JavaScript ()..
Sử dụng mỗi () thay vì foreach () ....
Lọc ra các giá trị bạn muốn bỏ qua.....
Sử dụng một biến số NOTSKIP.....
Sửa đổi độ dài mảng ..