Chúng ta vừa học được về Callback Hell và
cách hứa hẹn có thể giúp chúng ta vượt qua vấn đề này.
Chúng tôi biết rằng trình điều khiển MongoDB nút bản thân hỗ trợ lời hứa.
Vì vậy, nếu bạn không chỉ định một callback,
các cuộc gọi đến các chức năng của họ sẽ trả lại lời hứa.
Vì vậy, chúng tôi sẽ cập nhật ứng dụng của chúng tôi để sử dụng các lời hứa để
tránh vấn đề địa ngục gọi lại mà chúng tôi vừa học được trong bài giảng trước đó.
Quay trở lại ứng dụng của chúng tôi,
một lần nữa tham gia thêm một cái nhìn vào lý do địa ngục gọi lại đã phát triển trong mã của chúng tôi.
Lưu ý rằng ở đây khi chúng tôi thực hiện các hoạt động,
chúng tôi có một hoạt động và sau đó bên trong callback của hoạt động
đó, sau đó chúng tôi cần phải bắt đầu các hoạt động tiếp theo và bên trong
callback của hoạt động đó chúng tôi đang bắt đầu các hoạt động tiếp theo và như vậy.
Vì vậy, bạn sẽ kết thúc với kim tự tháp này giống như cấu trúc ở đây.
Một hoạt động bên trong callback của người khác và bên trong callback.
Bây giờ, mã này sẽ sớm trở nên khó khăn và phức tạp để hiểu.
Vì vậy, đó là lý do tại sao chúng tôi muốn chuyển đổi mã này bằng cách sử dụng
lời hứa hỗ trợ mà Mongo DB Driver đã cung cấp
cho chúng tôi để thay vào đó chúng tôi có thể sử dụng lời hứa
chứ không phải là sử dụng các chức năng gọi lại như chúng tôi đã làm trong bài tập này.
Tất nhiên, tôi đã làm phiên bản trước đó chỉ để minh họa cho bạn làm thế nào chúng ta có thể
hạ cánh với địa ngục gọi lại và làm thế nào chúng ta có thể sử dụng lời hứa để khắc phục vấn đề này.
Vì vậy, trước khi chúng tôi cập nhật các tập tin index.js,
hãy để tôi đi vào operations.jsfile và sau đó chúng tôi sẽ cập nhật này đầu tiên.
Vì vậy, trong đây, bạn sẽ nhận thấy rằng khi chúng ta đang gọi hàm này ở đây,
chúng ta đang đi qua trong tham số thứ hai đó là một hàm callback ở đây.
Vì vậy, bởi vì chúng ta sẽ sử dụng những lời hứa ở đây.
Vì vậy, tôi chỉ cần xóa chức năng gọi lại và sau đó
kể từ khi cuộc gọi này để chèn sẽ trả lại lời hứa,
tôi chỉ sẽ trả lại lời hứa từ chức năng này.
Vì vậy, lưu ý làm thế nào mã đã được đơn giản hóa.
Tương tự như vậy cho thứ hai,
tôi sẽ chỉ đơn giản là loại bỏ chức năng gọi lại này và
sau đó trả về lời hứa
đang được trả lại bởi điều này và sau đó chúng tôi sẽ xử lý điều đó trong mã trong index.js.
Tương tự như vậy cho một xóa cũng,
tôi sẽ loại bỏ các callback và sau đó trả lại rằng tai nạn và cũng cho uptade.
Để cập nhật, chúng tôi sẽ loại bỏ các callback mà chúng tôi đã đưa ra
ở đây và sau đó trả lại lời hứa.
Vì vậy, theo cách này tất cả bốn chức năng sẽ
được trả về lời hứa mà đã được trả về
bởi các cuộc gọi đến các chức năng điều khiển MongoDB.
Bây giờ một khi chúng tôi đã hoàn thành điều đó, chúng
ta hãy quay trở lại index.js.
Trong index.js, tôi sẽ cập nhật lại chức năng này ở đây.
Vì vậy, sử dụng lời hứa sẽ nói MongoClient.connect (url) và sau đó
chúng tôi sẽ thay thế điều này bằng cách nói “sau đó” và điều này chỉ nhận được db như tham số của họ.
Và bên trong đây, chúng tôi sẽ xử lý phần còn lại và chúng tôi cũng có thể
làm nhận thấy rằng chức năng đặc biệt này đóng “Sau đó” ở đây và lời hứa,
phần thứ hai để lời hứa,
chúng tôi có thể xử lý các lỗi.
Chúng ta có thể nói consolelog.
Vì vậy, chúng ta có thể sử dụng các bắt của lời hứa cũng để bắt các lỗi.
Vì vậy, theo cách đó, chúng tôi đã bắt gặp các lỗi.
Bây giờ, chúng ta hãy cải thiện mã bên trong đây.
Vì vậy, bên trong đây chúng tôi đang làm DB hoạt động chèn tài liệu,
và thay vì gọi chức năng này ở đây,
những gì tôi sẽ làm là biến điều này thành “sau đó” ở đây.
Vì vậy, tôi sẽ đóng cửa điều này và nói.then kết quả.
Vì vậy, bên trong những kết quả,
chúng tôi sẽ in ra các bản ghi giao diện điều khiển và sau đó.
Vì vậy, tôi sẽ đóng cửa này ra ở đây và sau đó chúng tôi sẽ
đóng “sau đó” ở đây và sau đó
điều này sẽ được gắn vào một lần nữa một “sau đó” ở đây.
Vì vậy, bạn thấy rằng tôi đang chuỗi hai “thens”
một vào khác ở đây và sau đó bên trong chúng tôi sau đó,
chúng tôi sẽ làm một bản ghi giao diện điều khiển và sau đó chúng tôi sẽ làm một trở lại của các hoạt động tiếp theo.
Nhưng sau đó, cho hoạt động này,
tôi sẽ đóng cửa này và đóng này
sau đó và sau đó cuộc gọi này trở lại một lần nữa bây giờ sẽ
được xử lý bên trong một chức năng “sau đó” ở đây.
Vì vậy, lưu ý làm thế nào bạn có chức năng đầu tiên và trong “sau đó” chúng tôi đang gọi
các tài liệu tìm dboper và đó sẽ trở lại và điều này sẽ trả lại một lời hứa.
Lời hứa đó sẽ được xử lý bởi điều này sau đó.
Vì vậy, chúng tôi đang xích hai thens với nhau và sau đó một lần nữa xích lại một “sau đó” ở đây.
Hãy để tôi phát minh lại mã ở đây và sau đó chúng tôi sẽ trả lại điều này ở đây và
điều này một lần nữa sẽ đóng lại và
đóng “sau đó” và sau đó điều này được kèm theo bên trong tiếp theo “sau đó” và chúng tôi
sẽ gọi chức năng tiếp theo ở đây “rằng
DB.dropCollection ('Món ăn' và đóng “này sau đó” và tiếp theo ở đây.
Chúng tôi sẽ xử lý “sau đó” của kết quả ở đây.
Quay trở lại dbclose và tất cả
những ở đây bây giờ có thể được gỡ bỏ bởi vì họ không còn cần thiết.
Và sau đó cuối cùng nếu có một lỗi sẽ bắt lỗi chức năng này.
Vì vậy, tôi sẽ chỉ sao chép này và sau đó dán nó ở đây. Đó là nó.
Với sự thay đổi này bây giờ,
mã của bạn là dễ dàng hơn rất nhiều để xử lý ở đây.
Vì vậy, như bạn có thể thấy,
bạn có MongoClient.Connect
trả về một lời hứa và bên trong việc xử lý lời hứa đó,
họ đang gọi các phương pháp này và cái khác họ đang
mỗi trả về lời hứa và sau đó bạn đang chuỗi chúng bằng cách sử dụng các.
Cấu trúc hợp âm này dễ theo dõi hơn rất nhiều so với những gì chúng tôi đã thực hiện trước đó.
Vì vậy, sử dụng lời hứa chúng tôi đã theo nghĩa đen biến nó xung quanh và sau đó tránh
địa ngục gọi lại mà chúng tôi đã thấy trong phiên bản trước của ứng dụng này.
Vì vậy, chúng ta hãy lưu các thay đổi cho cả
index.jsn.operation.js và sau đó có một cái nhìn vào ứng dụng này.
Một lần nữa đi đến thiết bị đầu cuối,
tại dấu nhắc gõ “npm
start” và bạn sẽ thấy rằng ứng dụng của bạn chạy chính xác như trước,
nó chèn tài liệu, tìm tài liệu,
cập nhật tài liệu và sau đó tìm
tài liệu cập nhật và sau đó đóng cơ sở dữ liệu của hành động.
Vì vậy, sử dụng lời hứa chúng tôi đã tái cấu trúc mã để được dễ dàng hơn rất nhiều và
tránh địa ngục gọi lại mà chúng tôi đã thấy trong phiên bản trước của ứng dụng này.
Với điều này, chúng tôi hoàn thành bài tập này.
Trong bài tập này, bạn đã thấy làm thế nào chúng ta có thể sử
dụng những lời hứa để tránh địa ngục gọi lại.
Đây là thời điểm tốt để bạn thực hiện một cam kết git với
địa ngục gọi lại tin nhắn và hứa hẹn.