Promise là gì ? resolve, reject ?
NodeJS 2019
/** * Promise là gì. */ let promise = new Promise((resolve, reject) => { resolve('Success!'); // reject(new Error('Faild!')); }); promise.then( res => console.log(res), err => console.log(err.toString()));
Kết quả: Success!
Hướng dẫn chạy đoạn code trên: lưu file demo.js -> chạy node demo ở command
Tái sử dụng promise như thế nào ?
NodeJS 2019
/** * Tái sử dụng promise như thế nào ? */ let add = (a, b) => { return new Promise((resolve, reject) => { if (typeof a == 'number' && typeof b == 'number') { resolve(a + b); } else { reject(new Error('Tham số phải là kiểu số.')); } }); } add(3, 4).then( res => console.log('res: ' + res), err => console.log(err.toString()) );
Kết quả: res: 7
Promise liên tiếp
NodeJS 2019
/** * Promise liên tiếp */let add = (a, b) => { return new Promise((resolve, reject) => { if (typeof a == 'number' && typeof b == 'number') { resolve(a + b); } else { reject(new Error('Tham số phải là kiểu số.')); } }); }add(3, '4') .then(res1 => add(res1, 2) .then(res2 => console.log('res2: ' + res2)) .catch(err => console.log(err.toString())) // Chỉ cần 1 promise lỗi thì sẽ dừng chương trình và báo lỗi ); add(3, '4') .then(res1 => add(res1, 3), err1 => console.log(err1.toString())) .then(res2 => console.log('res2: ' + res2), err2 => console.log(err2.toString())); // ngược lại vơi vd trên
Kết quả:
Error: Tham số phải là kiểu số.
res2: undefined
(node:7248) UnhandledPromiseRejectionWarning: Error: Tham số phải là kiểu số....
Phương thức all và race
NodeJS 2019
/** * Phương thức all */ let add = (a, b) => { return new Promise((resolve, reject) => { if (typeof a == 'number' && typeof b == 'number') { resolve(a + b); } else { reject(new Error('Tham số phải là kiểu số.')); } }); } let multi = (a, b) => { return new Promise((resolve, reject) => { if (typeof a == 'number' && typeof b == 'number') { resolve(a * b); } else { reject(new Error('Tham số phải là kiểu số.')); } }); } Promise.all([add(3, 4), multi(3, 4)]) .then(res => console.log('res: ' + res)) .catch(err => console.log(err.toString())); // Chú ý cả hai phương thức add và multi đều resolve thì res mới có kết quả
Kết quả: res: 7, 12
Phương thức all và race
NodeJS 2019
/** * Phương thức race */ Promise.race([add(3, 4), multi(3, '4')]) .then(res => console.log('res: ' + res)) .catch(err => console.log(err.toString())); // Chú ý race sẽ chạy lần lượt từng phương thức // Nếu add lỗi thì dừng chương trình // Nếu multi lỗi thì res sẽ có giá trị
Kết quả: res: 7
NodeJS express ejs
Status và value
NodeJS 2019
npm initnpm install express ejs --save
var express = require('express');
var app = express();
app.set('view engine', 'ejs');
app.set('views', './views')
app.get('/', (req, res) => { res.render("home"); })
app.listen(8080);
npm start
npm start
home.ejs
NodeJS 2019
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> Hello <script> /** * Tái sử dụng promise như thế nào ? */ let add = (a, b) => { return new Promise((resolve, reject) => { setTimeout(function () { if (typeof a == 'number' && typeof b == 'number') { resolve(a + b); } else { reject(new Error('Tham số phải là kiểu số.')); } }, 2000); }); } let a = add(3, 4).then( res => 'res: ' + res, err => console.log(err.toString())); console.log(a); setTimeout(() => console.log(a), 2500); </script> </body> </html>
Qua ví dụ này chúng ta thấy Promise có status như trên
0 nhận xét:
Post a Comment