Có nhiều cách để trả về phản hồi từ lệnh gọi không đồng bộ trong javascript. Hãy để chúng tôi hiểu vấn đề trước. Giả sử bạn có một hàm gọi là foo không đồng bộ và sẽ cung cấp dữ liệu sau một thời gian. Nó có thể làm điều này theo 2 cách. Nó có thể chấp nhận một lệnh gọi lại mà nó sẽ gọi khi nó sẵn sàng thực thi với dữ liệu. Hoặc nó có thể trả lại một lời hứa.
Ví dụ:hàm setTimeout chấp nhận một cuộc gọi lại và thực thi nó sau một khoảng thời gian cố định. vì vậy, giả sử rằng bạn thực hiện với cách tiếp cận đầu tiên, sau đó bạn có thể chuyển hàm trong setTimeout.
Ví dụ
function myFunc(cb) { setTimeout(() => cb(100), 1000); } myFunc((a) => console.log(a))
Đầu ra
100
Điều này sẽ gọi hàm setTimeout với một lệnh gọi lại sẽ thực thi sau 1000 mili giây. khi hàm đó được thực thi, nó sẽ gọi lệnh gọi lại đã truyền (cb) với giá trị được trả về từ lệnh gọi lại của setTimeout.
Sử dụng lời hứa
Bạn cũng có thể làm điều này bằng cách sử dụng các lời hứa. Kết hợp hàm không đồng bộ của bạn với một lời hứa và giải quyết lời hứa này bằng giá trị trả về của hàm. Bạn có thể xâu chuỗi phương thức then và chuyển nó một lệnh gọi lại để sử dụng giá trị được trả về từ hàm không đồng bộ.
,
Ví dụ
new Promise(resolve => setTimeout(() => resolve(100), 1000)) .then(console.log)
Đầu ra
100