Javascript là một ngôn ngữ bất đồng bộ.
Câu lệnh trước chưa chạy xong đã bắt đầu chạy câu lệnh thứ 2
Async và Await là gì?
demo.js
/** * Async Await */ let add = (a, b) => { return new Promise((resolve, reject) => { setTimeout(() => { if (typeof a == 'number' && typeof b == 'number') { resolve(a + b); } else { reject(new Error('Tham số phải là kiểu số!')); } }, 2000); }) } let add = async () => { // let res = add(4, 5); // add chưa chạy xong đã chạy log let res = await add(4, 5); // add chạy xong thì mới chạy tới log console.log(res); } add();
Kết quả: '' Nếu không có await
Kết quả: 9 Nếu có await
// Lưu ý từ khóa await chỉ chạy trong function async.
Sử dụng await liên tiếp
demo.js
/** * Sử dụng await liên tiếp */ let add = (a, b) => { return new Promise((resolve, reject) => { setTimeout(() => { if (typeof a == 'number' && typeof b == 'number') { resolve(a + b); } else { reject(new Error('Tham số phải là kiểu số!')); } }, 2000); }) } let multiply = (a, b) => { return new Promise((resolve, reject) => { setTimeout(() => { if (typeof a == 'number' && typeof b == 'number') { resolve(a * b); } else { reject(new Error('Tham số phải là kiểu số!')); } }, 2000); }) } let divide = (a, b) => { return new Promise((resolve, reject) => { setTimeout(() => { if (b === 0) { reject(new Error('Chia cho số 0')); } else if (typeof a == 'number' && typeof b == 'number') { resolve(a / b); } else { reject(new Error('Tham số phải là kiểu số!')); } }, 2000); }) } let tinhDienTich = async (a, b, h) => { try { let ab = await add(a, b); let abh = await multiply(ab, h); let square = await divide(abh, 2); console.log(square); } catch (error) { console.log(error.toString()); // phải bắt try catch với trường hợp này! } } tinhDienTich(3, 4, 5);
Kết quả: 17.5
Sử dụng callback function
demo.js
let tinhDienTich = async (a, b, h, callback) => { try { let ab = await add(a, b); let abh = await multiply(ab, h); let square = await divide(abh, 2); callback(undefined, square); } catch (error) { callback(error); } } tinhDienTich(3, 4, 5, (err, res) => { if (res) { console.log(res); } else { console.log(err.toString()); } });
Kết quả: 17.5
Sử dụng Async function trả về Promise
demo.js
let tinhDienTich = async (a, b, h) => { try { let ab = await add(a, b); let abh = await multiply(ab, h); let square = await divide(abh, 2); return Promise.resolve(square); } catch (error) { return Promise.reject(error); } } tinhDienTich(3, 4, 5) .then(res => console.log(res)) .catch(err => console.log(err.toString()));
Kết quả: 17.5
0 nhận xét:
Post a Comment