Sau phần giới thiệu ngắn gọn về những lời hứa trong bài giảng trước đó, chúng
ta hãy chuyển sang bài tập tiếp theo của chúng tôi, nơi chúng tôi sẽ
sử dụng những lời hứa trong ứng dụng góc cạnh của chúng tôi.
Đặc biệt, hứa hẹn là cách thiết yếu để đối phó với sự chậm trễ đặc biệt là khi
bạn cần truy cập và lấy dữ liệu từ máy chủ
trước khi được chuyển đến thành phần thông qua dịch vụ của bạn.
Vì vậy, các dịch vụ thường trả lại lời hứa cho
các thành phần khi các thành phần gọi các phương thức dịch vụ,
và sau đó khi lời hứa
giải quyết thì các thành phần sẽ có kết quả có sẵn cho chúng.
Chúng tôi sẽ cấu hình lại các dịch vụ mà chúng tôi có trong
ứng dụng góc cạnh của chúng tôi để trả lại
lời hứa và sau đó chúng tôi sẽ cấu hình lại
các thành phần của chúng tôi để có thể đối phó với những lời hứa.
Bước đầu tiên của chúng tôi trong bài tập này là cấu hình lại tất cả các dịch vụ để trả lại lời hứa.
Vì vậy, mỗi phương pháp trong dịch vụ của chúng tôi thay vì trả về
giá trị ngay lập tức nó sẽ trả lại lời hứa.
Vì vậy, làm thế nào để chúng tôi cấu hình các dịch vụ của chúng tôi để trả lại lời hứa?
Vì vậy, đi đến tập tin dishservice.t,
phương pháp getDishes ở đây sẽ trả lại một lời hứa thay vì mảng món ăn.
Vì vậy, chúng tôi cấu hình phương pháp GetDishes để trả lại
lời hứa bằng cách bao bọc đối tượng món ăn này bên trong một lời hứa.
Điều này có nghĩa là nếu lời hứa giải quyết thì kết quả được cung cấp
bởi lời hứa GetDishes sẽ là một mảng món ăn.
Vì vậy, trong thành phần của bạn,
bạn sẽ nhận được mảng món ăn nếu kết quả lời hứa một cách chính xác.
Bây giờ chúng ta đã cấu hình các GetDishes để trả về một lời hứa,
chúng ta cần phải cấu hình lại mã để
mảng món ăn này sẽ được trả về như là một phần của một lời hứa.
Bây giờ kể từ khi chúng ta có kết quả đã có sẵn cho chúng
tôi, tôi sẽ sử dụng phương pháp phím tắt
trả lời hứa bằng cách giải quyết lời hứa ngay lập tức.
Bây giờ rõ ràng, điều này hoạt động tốt nếu bạn có kết quả ngay lập tức sẵn có với bạn.
Nhưng, khi bạn cấu hình lại dịch vụ của mình
để có thể đi và lấy dữ liệu này từ một máy chủ,
thì chúng ta sẽ phải viết lại mã này để đối phó với thực tế là
dịch vụ sẽ không trả lại kết quả
ngay lập tức thay vào đó bạn sẽ phải đợi một thời gian.
Trong bài tập tiếp theo,
chúng ta sẽ mô phỏng sự chậm trễ bằng cách sử dụng một phương pháp JavaScript để nó cung cấp cho bạn
một cảm giác về những gì nó có nghĩa là để đối phó với sự chậm trễ trong việc nhận được một kết quả từ một lời hứa.
Bây giờ chúng tôi đã cấu hình các GetDishes để trả về lời hứa,
tương tự, chúng tôi sẽ cấu hình lại hai phương thức còn lại.
Vì vậy, tôi sẽ sao chép lời hứa này từ
đây và sau đó chỉ cần đính kèm điều này vào hai phần còn lại ở đó,
để tôi sẽ chuyển đổi họ cũng để trả
lời hứa và sau đó tất nhiên bất cứ điều gì chúng ta
có ở đây nên được kèm theo bên trong lời hứa quyết tâm.
Vì vậy, tôi sẽ chỉ sao chép lời hứa quyết tâm
và kèm theo điều này bên trong quyết tâm ở đây.
Tương tự như vậy, đối với món ăn đặc trưng tôi sẽ kèm theo điều này bên trong lời hứa quyết tâm.
Bây giờ, dịch vụ món ăn của tôi được cấu hình để trả lại lời hứa.
Rõ ràng, điều này cũng có nghĩa là tôi cần phải đi đến các
thành phần của tôi và sau đó cấu hình lại các thành phần để có thể đối phó
với thực tế là họ không nhận được dữ liệu
ngay lập tức thay vì họ đang nhận được một lời hứa và sau đó họ
sẽ phải thực hiện các phương pháp sau đó trong
đó lời hứa khi nó kết quả sẽ cung cấp dữ liệu cho bạn.
Vì vậy, bây giờ chúng tôi đã cấu hình dịch vụ món ăn,
chúng tôi biết một nơi mà dịch vụ đang được sử dụng tích cực và đó là thành phần menu.
Vì vậy, để tôi cho bạn thấy làm thế nào chúng tôi sẽ cấu
hình lại thành phần để có thể đối phó với lời hứa.
Vì vậy, khi bạn đi đến menucomponent bạn sẽ ngay lập tức
nhận thấy rằng có một dòng squiggly màu đỏ dưới các món ăn bởi vì,
như bạn thấy, bây giờ, D
ishservice.Getdish là trả lại một lời hứa và sau đó ở đây bạn có,
lời hứa được gán cho một đối tượng mảng món ăn và điều này là không chính xác.
Làm thế nào để chúng ta cấu hình lại mã này?
Vì vậy, như tôi đã đề cập,
khi chúng tôi cấu hình lại mã,
chúng ta cần phải thực hiện sau đó và bắt cho các getDishes.
Vì vậy, hãy để tôi đi trước và thực hiện chỉ sau đó tại thời điểm này,
cho các phương pháp getDishes bởi vì bắt có thể được thực hiện sau này.
Ngay bây giờ chúng ta biết rằng lời hứa sẽ luôn luôn giải quyết một cách chính xác,
vì vậy chúng tôi sẽ thực hiện phương pháp
sau đó ở đây, và sau đó, bên trong phương pháp sau đó,
tôi sẽ nhận được các món ăn đối tượng đến khi lời hứa giải quyết.
Và khi đó là món ăn đối tượng đi vào như một tham số,
vì vậy bạn thấy rằng tôi đang viết một chức năng mũi tên ở đây,
Tôi chỉ sẽ cắt ra và bao gồm ngay đó.
Đây rồi. Đây là cách thành phần
của bạn bây giờ có thể nắm giữ lời hứa và sau đó lấy kết quả khi lời hứa được giải quyết.
Bạn có thể thấy rằng chúng tôi có DishService GetDishes và sau đó phương pháp
thay đổi để nó và theo đó khi sau đó được gọi,
khi lời hứa giải quyết từ phía bên kia,
sau đó các món ăn sẽ được giao cho bạn bởi vì phương pháp getDishes
là trả về một lời hứa nhưng kết quả sẽ được một mảng món ăn.
Mảng món ăn đó đến như là một tham số ở đây vì vậy tôi đang viết một hàm mũi tên
ở đây, nơi tôi đang gán rằng món ăn này cho các món ăn.
Vì vậy, khi lời hứa này giải quyết thì các món ăn sẽ
được giao cho món ăn này. Đó là nó.
Bây giờ thành phần menu của tôi đã sẵn sàng để đối phó với lời hứa.
Tất nhiên, để đối phó với các lỗi bạn cũng cần phải
chuỗi các phương pháp catch vào phương pháp getDishes.
Vì vậy, sau đó và bắt là các phương pháp mà
lời hứa cung cấp cho bạn và do đó bạn thực hiện điều
đó và trong đó bạn sẽ cung cấp các chức năng giao dịch với
tình huống khi lời hứa giải quyết hoặc khi lời hứa từ chối với một lỗi.
Bây giờ tương tự như vậy, chúng ta nên cấu hình lại phương pháp chi tiết món ăn
và cũng là thành phần nhà để đối phó với thực tế là D
ishService hiện đang cung cấp lời hứa chứ không phải là cung cấp các giá trị ngay lập tức.
Trong khi chúng tôi đang ở đó,
chúng tôi cũng có thể cấu hình lại cả hai nhà lãnh đạo và dịch vụ khuyến mãi cũng.
Vì vậy, tôi sẽ để nó như là một bài tập để bạn hoàn thành,
cập nhật cả dịch vụ lãnh đạo và dịch vụ khuyến mãi
để có thể cung cấp những lời hứa tương ứng.
Ngoài ra, do đó, bạn sẽ phải cấu
hình lại mã kịch bản kiểu thành phần trong thành phần chi tiết món ăn,
trong thành phần nhà để đối phó với thực tế là bạn
đang nhận được lời hứa chứ không phải là kết quả thực tế.
Vì vậy, tôi sẽ cho phép bạn hoàn thành phần đó thay vì minh họa tất cả những gì chi tiết,
tôi đã chỉ cho bạn một bước với thành phần chi tiết món ăn.
Vui lòng hoàn thành các bước với cả nhà lãnh đạo và dịch vụ khuyến mãi,
và sau đó cấu hình các thành phần tương ứng cho phù hợp.
Hãy để tôi nhanh chóng hướng dẫn bạn qua các bản cập nhật mà bạn cần phải hoàn thành.
Vì vậy, như bạn thấy các nhà lãnh đạo dịch vụ tôi đã cập nhật đã có với lời hứa.
Như bạn có thể thấy ở đây,
tất cả các phương pháp bây giờ đã được cập nhật để trả lại
lời hứa giống như cách chúng tôi đã làm với DishService.
Tương tự như vậy, các dịch vụ khuyến mãi cũng được cập nhật để
trả lại lời hứa từ tất cả các phương pháp ở đó.
Bây giờ, đi đến các thành phần về,
bạn sẽ thấy rằng trong các thành phần về cũng chúng tôi đã cấu hình để
nhận được các giá trị trong thời gian sau đó của lời hứa có.
Tương tự như vậy, trong thành phần chi tiết món ăn bạn sẽ nhận thấy rằng tôi đã
cấu hình lại điều này để đối phó với lời hứa ở đó.
Tương tự như vậy, trong thành phần nhà,
bạn sẽ nhận thấy rằng trong thành phần nhà
tất cả ba phương pháp ở đây: GetFeaturedDish,
FeaturedPromotion, và FeaturedLeader đã được cập nhật,
với sau đó gắn liền với mỗi một trong số họ để đối phó với lời hứa.
Mã là khá nhiều tương tự như những gì tôi đã minh họa với các thành phần menu.
Một khi bạn hoàn thành điều này, chúng
ta hãy xem nhanh ứng dụng của chúng tôi.
Đi đến ứng dụng của chúng tôi trong trình duyệt,
bạn sẽ không thấy bất kỳ sự khác biệt nào trong ứng dụng.
Nó hoạt động chính xác giống như trước đây,
ngoại trừ bây giờ nó đang sử dụng lời hứa khi
các dịch vụ được thực hiện và các thành phần của bạn
đang đối phó với các lời hứa khi chúng được giải quyết.
Vì vậy, các thành phần trình đơn hoạt động chính xác và
cũng là thành phần chi tiết món ăn cũng hoạt động chính xác.
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, chúng tôi đã thấy làm thế nào chúng tôi có thể nâng cấp dịch vụ của mình để
cung cấp lời hứa và chúng tôi cũng cập nhật các thành phần của mình để có thể đối phó với lời hứa.
Điều này hoàn thành bài tập này.
Đây là thời điểm tốt để bạn thực hiện một cam kết git với thông điệp 'Promise part one'.