Thực thi tuần tự JavaScript
Tôi thích thư viện Promise mới đi kèm với ES6, mặc dù có một thứ đã bị loại bỏ, một chức năng để thực hiện tuần tự nhiều lời hứa Show
Chúng ta có thể sử dụng một thư viện như Q, Bluebird, RSVP. js, Không đồng bộ, v.v. hoặc chúng ta có thể tự làm. Tôi thực sự chỉ cần một chức năng duy nhất và có vẻ hơi nặng nề khi nhập toàn bộ thư viện cho một chức năng, đó là lý do tại sao tôi tạo ra cái này Một đặc điểm của Promise là nó thực thi ngay lập tức. Điều này thực sự chống lại chúng tôi, chúng tôi sẽ cần các Lời hứa thực thi khi chúng tôi sẵn sàng để nó thực thi Cách tôi đã làm điều này là chuyển đổi từng Lời hứa thành một chức năng xuất xưởng. Chức năng xuất xưởng sẽ là một chức năng đơn giản sẽ trả về một Lời hứa. Bây giờ Lời hứa của chúng tôi sẽ thực hiện khi chúng tôi quyết định Đối với ví dụ giả tạo *ho* này, tôi đã quyết định sử dụng phương thức ajax của jQuery như lời hứa của mình // some dummy urls to resolve Giải quyết vấn đề này hơi phức tạp và tôi thấy nó giúp tôi suy nghĩ trước một chút về những gì hàm của chúng ta sẽ xuất ra. Có lẽ một cái gì đó như thế này Promise.resolve() Tôi cũng muốn lời hứa cuối cùng trả về một mảng chứa kết quả của từng lời hứa Đây là phần phức tạp nhất. Tôi cần bắt đầu mỗi lời hứa với một mảng trống Tôi sẽ bắt đầu Lời hứa này với giá trị ban đầu của một mảng trống như thế này Promise.resolve() 0Để đơn giản, ví dụ này chỉ giải quyết chỉ mục Promise.resolve() 1of func. Chúng tôi sẽ làm phần còn lại sau// start our promise off with an empty array. this becomes all. Khối mã này có thể được thể hiện điều này theo cách nhỏ gọn hơn bằng cách xóa tất cả các Promise.resolve() 2, Promise.resolve() 3 và Promise.resolve() 4 khỏi mã của chúng tôi________số 8_______Một mẹo hay để loại bỏ chức năng mũi tên đó là gọi trực tiếp Promise.resolve() 5 như thế nàyPromise.resolve([]) Và cuối cùng, đây sẽ là đầu ra của chức năng của chúng tôi Promise.resolve([]) Điều đó không tệ lắm phải không? Chúng ta có thể sử dụng vòng lặp Promise.resolve() 6 (nhưng nó không hoạt động tốt lắm), chúng ta cũng có thể sử dụng đệ quy, nhưng điều tôi thực sự thích cho vấn đề này là Promise.resolve() 7
Hàm Promise.resolve() 8 của chúng ta sẽ nhận một mảng các hàm xuất xưởng (mỗi hàm trả về một Lời hứa) và rút gọn chúng thành một chuỗi Lời hứa duy nhất được biểu thị ở trênGiá trị ban đầu của chúng tôi là const promiseSerial = funcs => Phần cuối cùng là khái quát hóa một trong những Lời hứa của chúng tôi về Promise.resolve() 0 từ phía trên và cập nhật một số tên đối số. (phần mới in đậm)const promiseSerial = funcs => Đó là nó. Một chức năng khá đơn giản… cào mà… ngắn sẽ giải quyết các Lời hứa một cách tuần tự Cuối cùng, hãy tát tất cả lại với nhau Bây giờ chúng tôi đã loại bỏ nhu cầu cài đặt thư viện của bên thứ 3 với chức năng Promise.resolve() 8 mới sáng bóng của chúng tôiChào. Bạn thực sự đã đi đến cuối bài viết này Trường hợp sử dụng của bạn để giải quyết các lời hứa một cách tuần tự là gì? Tôi biết đó là một việc nhỏ, nhưng nó khiến tôi vui vẻ cả ngày khi nhận được những thông báo theo dõi đó trên Medium và Twitter (@joelnet). Hoặc nếu bạn nghĩ rằng tôi đầy rác rưởi, hãy cho tôi biết trong phần bình luận bên dưới Chúc mừng Những bài viết liên quanSuy nghĩ lại về JavaScript. Break là GOTO của các vòng lặpTrong bài viết trước của tôi, Cái chết của vòng lặp for, tôi đã cố gắng thuyết phục bạn từ bỏ vòng lặp for để có một vòng lặp nhiều chức năng hơn…trung bình. com Suy nghĩ lại về JavaScript. Cái chết của vòng lặp ForVòng lặp for của JavaScript đã phục vụ chúng ta rất tốt, nhưng nó hiện đã lỗi thời và nên được gỡ bỏ để nhường chỗ cho các chức năng mới hơn…hackernoon. com Suy nghĩ lại về JavaScript. Câu lệnh ifSuy nghĩ chức năng đã mở mang đầu óc của tôi về lập trìnhtrung bình. com
|