Sự khác biệt giữa từ khóa await và từ khóa yield là gì?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
345 lượt xem
Javascript master

yield có thể được coi là cơ sở xây dựng của await. yield nhận giá trị mà nó được cho và chuyển nó cho caller. Caller sau đó có thể làm bất cứ điều gì nó muốn với giá trị đó (1). Sau đó, caller có thể trả lại một giá trị cho generator (thông qua generate.next()), giá trị này sẽ trở thành kết quả của biểu thức yield (2) hoặc một lỗi sẽ được thảy ra bởi biểu thức yield (3).

async - await có thể được coi là sử dụng yield. Tại (1), caller (tức là trình điều khiển async - await - tương tự như chức năng bạn đã đăng) sẽ bọc giá trị trong một promise bằng cách sử dụng một thuật toán tương tự như new Promise(r => r(value)) (lưu ý, không phải là Promise.resolve, nhưng đó không phải là một vấn đề lớn). Sau đó nó sẽ đợi promise để resolve. Nếu nó hoàn thành, nó sẽ chuyển giá trị đã hoàn thành trở lại (2). Nếu nó reject, nó sẽ thảy ra lý do reject để làm lỗi ở (3).

Vì vậy, tiện ích của async - await là sử dụng yield để lấy giá trị thu được như một promise và truyền lại giá trị đã resolve của nó, lặp lại cho đến khi hàm trả về giá trị cuối cùng của nó.

{{login.error}}