Trong bài viết này, chúng ta sẽ cố gắng hiểu làm thế nào chúng ta có thể dễ dàng thực hiện nhiều lời hứa một cách tuần tự [lần lượt từng lời hứa] với một số kỹ thuật hoặc phương thức do JavaScript cung cấp
Trước tiên, chúng ta hãy nhanh chóng hiểu cách chúng ta có thể tạo một lời hứa bằng cách sử dụng cú pháp sau do JavaScript cung cấp
cú pháp. Cú pháp sau có thể được sử dụng để tạo lời hứa trong JavaScript
let promise = new Promise[[resolve, reject] => resolve[10]]
Bằng cách sử dụng cú pháp trên, chúng ta có thể tạo lời hứa thành công bằng cách giải quyết nó [có trạng thái đã giải quyết] hoặc từ chối nó [có trạng thái bị từ chối]
Thí dụ. Trong ví dụ này, chúng tôi sẽ tạo một lời hứa đơn giản chỉ để xem nó hoạt động như thế nào hoặc nó được thực hiện như thế nào
Javascript
GeeksforGeeks5
GeeksforGeeks6
GeeksforGeeks7____18
GeeksforGeeks9
GeeksforGeeks0
GeeksforGeeks1
GeeksforGeeks2
GeeksforGeeks3
GeeksforGeeks6
GeeksforGeeks5
GeeksforGeeks6
GeeksforGeeks7
GeeksforGeeks8
đầu ra
GeeksforGeeks
Bây giờ chúng ta đã hiểu cách tạo một lời hứa, hãy nhanh chóng xem và hình dung cách chúng ta có thể thực hiện nhiều lời hứa một cách tuần tự
Sau đây là một số cách tiếp cận mà qua đó chúng ta có thể dễ dàng thực hiện nhiều lời hứa một cách tuần tự
JavaScript được biết đến với các cuộc gọi không chặn thông qua việc sử dụng các lệnh gọi lại, lời hứa và async/await. 1 Đôi khi, nhu cầu sẽ phát sinh để xử lý một tập hợp các cuộc gọi không chặn tuần tự hoặc song song
Thiết lập
Giả sử chúng ta cần thực hiện một tập hợp các lệnh gọi API. api giả của chúng tôi sẽ là một chức năng sẽ trả về một lời hứa sẽ giải quyết sau 1 giây
const apiEndpoints = ["first", "second", "third"];
const apiCall = endpoint => new Promise[resolve => setTimeout[resolve, 1000]];
Tiến trình song song
Trong trường hợp này, thứ tự thực hiện các lệnh gọi API không quan trọng, chúng ta chỉ cần biết khi nào chúng hoàn thành
GeeksforGeeks0
Phương thức bản đồ được sử dụng trên mảng
GeeksforGeeks2 và mỗi giá trị được thay thế bằng lời hứa
GeeksforGeeks3 của chúng tôi. Khi mỗi lời hứa được giải quyết,
GeeksforGeeks42 sẽ giải quyết
xử lý tuần tự
Trong trường hợp này, thứ tự thực hiện là quan trọng. Mỗi lệnh gọi API phải đợi lệnh trước đó quay lại
GeeksforGeeks1
Phương thức rút gọn3 được sử dụng trên
GeeksforGeeks2 để chúng ta có thể tận dụng bộ tích lũy giảm được truyền vào dưới dạng biến đầu tiên trong hàm gọi lại. Trong ví dụ này, chúng tôi đã đặt tên bộ tích lũy là
GeeksforGeeks6. Vai trò của bộ tích lũy là chuyển giá trị trả về từ lần lặp trước sang lần lặp tiếp theo. Đối với lần lặp đầu tiên, một lời hứa đã giải quyết được sử dụng làm trình khởi tạo. Chúng ta có thể đã sử dụng bất kỳ giá trị nào cho bộ khởi tạo trong trường hợp này, nhưng nói chung, bộ khởi tạo phải cùng loại với bộ tích lũy
Đối với lệnh gọi lại reduce, chúng tôi chờ lời hứa
GeeksforGeeks6 giải quyết và trả lại một
GeeksforGeeks3, đó là một lời hứa. Lời hứa đó được chuyển sang lần lặp tiếp theo
JavaScript được biết đến với các cuộc gọi không chặn bằng cách sử dụng các cuộc gọi lại, lời hứa và không đồng bộ/chờ đợi. Đôi khi, nhu cầu sẽ phát sinh để xử lý một tập hợp các cuộc gọi không chặn tuần tự hoặc song song
Ảnh của Michael Dziedzic trên BaptSet Up
Giả sử chúng ta cần thực hiện một tập hợp các lệnh gọi API. api giả của chúng tôi sẽ là một chức năng sẽ trả về một lời hứa sẽ giải quyết sau 1 giây
GeeksforGeeks2Xử lý song song
Trong trường hợp này, thứ tự thực hiện các lệnh gọi API không quan trọng, chúng ta chỉ cần biết khi nào chúng hoàn thành
GeeksforGeeks3
Phương thức bản đồ được sử dụng trên mảng
GeeksforGeeks2 và mỗi giá trị được thay thế bằng lời hứa
GeeksforGeeks3 của chúng tôi. Khi mỗi lời hứa được giải quyết,
GeeksforGeeks1 sẽ giải quyếtxử lý tuần tự
Trong trường hợp này, thứ tự thực hiện là quan trọng. Mỗi lệnh gọi API phải đợi lệnh gọi trước quay lại
GeeksforGeeks4
Phương thức rút gọn được sử dụng trên
GeeksforGeeks2 để chúng ta có thể tận dụng bộ tích lũy giảm được truyền vào dưới dạng biến đầu tiên trong hàm gọi lại. Trong ví dụ này, chúng tôi đã đặt tên bộ tích lũy là
GeeksforGeeks6. Vai trò của bộ tích lũy là chuyển giá trị trả về từ lần lặp trước sang lần lặp tiếp theo. Đối với lần lặp đầu tiên, một lời hứa đã giải quyết được sử dụng làm trình khởi tạo. Chúng ta có thể đã sử dụng bất kỳ giá trị nào cho bộ khởi tạo trong trường hợp này, nhưng nói chung, bộ khởi tạo phải cùng loại với bộ tích lũy
Đối với lệnh gọi lại reduce, chúng tôi chờ lời hứa
GeeksforGeeks6 giải quyết và trả lại một
GeeksforGeeks3, đó là một lời hứa. Lời hứa đó được chuyển sang lần lặp tiếp theo