1. Sử dụng Callback
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h2>Xử lý bất đồng bộ trong ES6</h2> <script> // Giả sử gặp bài toán tính diện tích hình thang, với 2 cạnh a,b và chiều cao h. Bình thường làm đơn giản như sau // let square = (a, b, h) => (a + b) * h / 2; // Để mô hình hóa xử lý bất động bộ, ta giả sử các phép toán "+", "*" và "/" là các phép toán bất đồng bộ với setTimeout 1000ms let add = (a, b, callback) => { setTimeout(() => { if (typeof a != 'number' || typeof b != 'number') { return callback("Phép cộng phải có kiểu Number") } callback(undefined, a + b); }, 1000); } let multiply = (a, b, callback) => { setTimeout(() => { if (typeof a != 'number' || typeof b != 'number') { return callback("Phép nhân phải có kiểu Number") } callback(undefined, a * b); }, 1000); } let divide = (a, b, callback) => { setTimeout(() => { if (typeof a != 'number' || typeof b != 'number') { return callback("Phép chia phải có kiểu Number") } if (b === 0) { return callback("Phép chia cho 0") } callback(undefined, a / b); }, 1000); } // Kiểm tra thử 1 hàm ở trên // add(4, 2, (err, res) => { // if (err) return console.log("Lỗi: ", err); // console.log('Kết quả: ', res); // }) let squareHinhThang = (a, b, h, g = 2, callback) => { add(a, b, (err, res) => { if (err) return callback(err); multiply(res, h, (err, res) => { if (err) return callback(err); divide(res, 2, (err, res) => { if (err) return callback(err); callback(undefined, res); }) }) }) } //Kết quả phép toán tính diện tích hình thang: squareHinhThang(4, 3, 6, 2, (err, res) => { if (err) return console.log("Lỗi: ", err); console.log('Diện tích hình thang là: ', res); }) </script> </body> </html> |