22 September 2019

Promise cơ bản. resolve, reject, all, race, status, value ?

Promise cơ bản.
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

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

 

BACK TO TOP

Xuống cuối trang