Để xử lý nhiều Promise liên tục bất đồng bộ ta sử dụng Phương thức:
// Phép tính cộng
let add = (a, b) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (typeof a != 'number' || typeof b != 'number') {
return reject(
new Error('Tham số truyền vào phải là kiểu number! PHEP CONG')
);
}
return resolve(a + b);
}, 1000);
});
};
// Phép tính nhân
let multiply = (a, b) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (typeof a != 'number' || typeof b != 'number') {
return reject(
new Error('Tham số truyền vào phải là kiểu number! PHEP NHAN')
);
}
return resolve(a * b);
}, 1000);
});
};
// Phép tính chia
let divide = (a, b) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (typeof a != 'number' || typeof b != 'number') {
return reject(
new Error('Tham số truyền vào phải là kiểu number! PHEP CHIA')
);
}
if (b === 0) {
return reject(new Error('Số chia phải khác 0.'));
}
return resolve(a / b);
}, 1000);
});
};
Promise.all và Promise.race.Promise.all([aPromise01,aPromise02,aPromise03,…]) .then(result[output01,output02,output03,…]) .catch(…)`
var dienTich = Promise.all([add(4, 5), multiply(2, 3), divide(6, 2)]);
console.log(dienTich);
// Promise { <pending> }
var dienTich = Promise.all([add(4, 5), multiply(2, 3), divide(6, 2)])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log('Loi: ', err + ''));
// Ket qua: [ 9, 6, 3 ]
var dienTich = Promise.all([multiply(2, 3), divide(6, 2), add(4, 5)])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log('Loi: ', err + ''));
console.log('Lan 1: ', dienTich);
// Ket qua: [ 6, 3, 9 ]
var dienTich = Promise.all([add(4, '5'), multiply(2, 3), divide(6, 2)])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log('Loi: ', err + ''));
console.log('Lan 1: ', dienTich);
// Loi: Error: Tham số truyền vào phải là kiểu number! PHEP CONG
var dienTich = Promise.all([add(4, 5), multiply(2, 3), divide(6, '2')])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log('Loi: ', err + ''));
console.log('Lan 1: ', dienTich);
// Loi: Error: Tham số truyền vào phải là kiểu number! PHEP CHIA
var dienTich = Promise.all([add('4', 5), multiply(2, 3), divide(6, '2')])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log('Loi: ', err + ''));
console.log('Lan 1: ', dienTich);
// Loi: Error: Tham số truyền vào phải là kiểu number! PHEP CONG
Promise.race([aPromise01,aPromise02,aPromise03,…]) .then(…) .catch(…)`
var aResult = Promise.race([add(4, 5), multiply(2, 3), divide(6, 2)]);
console.log(aResult);
// Promise { <pending> }
var aResult = Promise.race([add('4', 5), multiply(2, 3), divide(6, '2')])
.then((res) => console.log(res))
.catch((err) => console.log(err + ''));
// Error: Tham số truyền vào phải là kiểu number! PHEP CONG
var aResult = Promise.race([add(4, 5), multiply(2, '3'), divide(6, 2)])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log(err + ''));
// Ket qua: 9
var aResult = Promise.race([add(4, 5), multiply(2, 3), divide(6, '2')])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log(err + ''));
// Ket qua: 9
var aResult = Promise.race([add(4, 5), multiply(2, 3), divide(6, 2)])
.then((res) => console.log('Ket qua: ', res))
.catch((err) => console.log(err + ''));
// Ket qua: 9
Promise.race sẽ được truyền vào là mảng các PromisePromise và cần được handle kết quả và bắt lỗi.Promise.race chỉ quan tâm đến Promise đầu tiên trong mảng, kết quả trả về của Promise này sẽ được sử dụng cho Promise.race, không cần quan tâm đến kết quả của các Promise còn lại có Resolve hay bị Reject hay không.