Giả sử chúng ta có một mảng gồm hai phần tử với cả hai phần tử của nó là hai hàm không đồng bộ. Chúng tôi được yêu cầu thực hiện một số công việc, chẳng hạn như in thứ gì đó ra bảng điều khiển (cho mục đích của câu hỏi này) khi quá trình thực thi của cả hàm không đồng bộ hoàn tất.
Làm thế nào chúng ta có thể tiếp cận thách thức này?
Về cơ bản có hai cách để thực hiện một số tác vụ sau khi hoàn thành một số tác vụ không đồng bộ -
- Sử dụng lời hứa
- Sử dụng các hàm async / await
Nhưng khi mã bao gồm xử lý nhiều (nhiều hơn một) hàm không đồng bộ thì hàm Promise.all của hàm trước có lợi thế hơn hàm sau.
Ví dụ
Sau đây là mã -
const arr = [ new Promise((resolve, reject) => { setTimeout(() => { resolve('func1 fired!'); }, 2000); }), new Promise((resolve, reject) => { setTimeout(() => { resolve('func2 fired'); }, 3000); }) ]; const lastFunction = () => { console.log('this function should be fired at the very last'); }; Promise.all([arr[0], arr[1]]).then((resp) => { console.log(resp); lastFunction(); }).catch((err) => { console.log('something unexpected happened'); })
Đầu ra
Điều này sẽ tạo ra kết quả sau trong bảng điều khiển -
[ 'func1 fired!', 'func2 fired' ] this function should be fired at the very last