khoa-pham-async-await

Phương thức resolve và reject



I. Thực hiện ở Server

1. Promise Resolve

1.1 Gọi trực tiếp Promise Resolve

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!'));
      }
      resolve(a + b);
    }, 1000);
  });
};

let aPromise = Promise.resolve(4);
console.log(aPromise);
// Promise { 4 }
let a = add(0, 4).then((rs) => rs);

1.2 Gọi Promise Resolve trả về 1 Promise

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!'));
      }
      resolve(a + b);
    }, 1000);
  });
};

let aPromise = Promise.resolve(add(4, 5));
console.log(aPromise);
// Promise { <pending> }
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!'));
      }
      resolve(a + b);
    }, 1000);
  });
};

let aPromise = Promise.resolve(add(4, 5));

// console.log(aPromise); // Promise { <pending> }
aPromise.then((res) => console.log(res));
// 9 : Trả về hiển thị kết quả của add(4,5)

1.3 Tóm tắt


2. Promise Reject

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!'));
      }
      resolve(a + b);
    }, 1000);
  });
};

let rPromise = Promise.reject('Bị lỗi');
console.log(rPromise);
//Promise { <rejected> 'Bị lỗi' }
// (node:9016) UnhandledPromiseRejectionWarning: Bị lỗi
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!'));
      }
      resolve(a + b);
    }, 1000);
  });
};

// handle bằng .catch khi error
let rPromise = Promise.reject('Bị lỗi');
rPromise.catch((er) => console.log(er + ''));
console.log(rPromise);
// Promise { <rejected> 'Bị lỗi' }
// Bị lỗi

// handle bằng .then khi error
let rPromise = Promise.reject('Bị lỗi');
rPromise.then(
  (res) => console.log(res),
  (er) => console.log(er + '')
);
console.log(rPromise);
// Promise { <rejected> 'Bị lỗi' }
// Bị lỗi

II. Thực hiện ở Client

1. Promise Resolve

// File server.js
let express = require('express');
let app = express();
app.listen(3000);
app.set('view engine', 'ejs');
app.set('views', './views');

app.get('/', (req, res) => {
  res.render('home');
});
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Lập trình Nodejs: Xử lý bất đồng bộ trong Javascript</title>
    <style>
      body {
        height: 100vh;
        background: linear-gradient(to top left, #28b487, #7dd56f);
      }
      h1 {
        text-align: center;
        color: white;
      }
    </style>
    <script type="text/javascript">
      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!')
              );
            }
            resolve(a + b);
          }, 2000);
        });
      };
    </script>
  </head>
  <body>
    <h1>Lập trình Nodejs: Xử lý bất đồng bộ trong Javascript</h1>
    <h2>Phương thức resolve và reject</h2>
  </body>
</html>

1.1 Gọi trực tiếp Promise Resolve truyền vào giá trị

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!'));
      }
      resolve(a + b);
    }, 1000);
  });
};

let aPromise = Promise.resolve(4);
console.log(aPromise);
// Promise { 4 }

Resolve

1.2 Truyền vào Promise Resolve là Promise

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!'));
      }
      resolve(a + b);
    }, 2000);
  });
};

let aPromise = Promise.resolve(add(4, 5));
console.log(aPromise);

Resolve

Resolve

2. Promise Reject

2.1 Promise Reject một giá trị truyền vào

let rPromise = Promise.reject('Bị lỗi.');
console.log(rPromise);

Reject

let rPromise = Promise.reject('Bị lỗi.');
rPromise.catch((err) => console.log(err));
console.log(rPromise);

Reject

2.2 Promise Reject một Promise

let rPromise = Promise.reject(add(4, '5'));
rPromise
  .then(
    (res) => res,
    (err) => console.log(err)
  )
  .catch((err) => console.log(err));

console.log(rPromise);

Reject