Node.js là một môi trường chạy mã JavaScript được kết hợp từ nhiều thành phần khác nhau. Trong một loạt bài viết về Kiến trúc Node.js - Giới thiệu về Node.js, chúng ta đã tìm hiểu về những thành phần và cả chức năng của nó.
Trong Node, có rất nhiều build-in modules - tức là các modules được tích hợp sẵn ngay từ đầu. Một trong số đó là util
mà theo như tôi thấy đang chưa nhận được nhiều sự chú ý. Trong util
là tập hợp các hàm tiện ích nho nhỏ có ích trong một số trường hợp. Bài viết ngày hôm nay chúng ta sẽ đi qua một số hàm có trong này nhé!
callback là một trong những cách xử lý bất đồng bộ đời đầu. callback có nhiều hạn chế như khiến mã lồng vào nhau và gây ra tình trạng callback hell. Đôi lúc đọc một đoạn mã viết theo kiểu callback mà khiến mình như tẩu "hoả nhập ma". Muốn thêm một tính năng mới cũng khó vì như thế sẽ tạo thêm một lớp logic lồng sâu vào nhau thêm nữa.
Trong Node, có một hàm tiện ích giúp chuyển đổi các hàm xử lý bất đồng bộ theo kiểu callback về Promise. Sử dụng khi bạn muốn chuyển cách viết về Promise, sau đó kết hợp với async/await để mã trở nên gọn gàng, dễ theo dõi hơn.
const util = require('node:util');
const fs = require('node:fs');
const stat = util.promisify(fs.stat);
async function callStat() {
const stats = await stat('.');
console.log(`This directory is owned by ${stats.uid}`);
}
callStat();
Ngược lại với util.promisify
, chúng ta có util.callbackify
để chuyển ngược lại các hàm Promise về callback.
const util = require('node:util');
async function fn() {
return 'hello world';
}
const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret) => {
if (err) throw err;
console.log(ret);
});
Nếu hay sử dụng thư viện, đôi khi bạn sẽ thấy trong console in ra mấy dòng thông báo kiểu:
oldFunction() is deprecated. Use newFunction() instead.
Đây là thông báo về việc một hàm oldFunction
sắp không còn được dùng nữa, rất có khả năng nó bị loại bỏ trong tương lai nên hãy sử dụng một hàm khác như newFunction
để thay thế.
Đây là một cách rất phổ biến để nhắc nhở lập trình viên khi sử dụng một hàm sắp bị "khai tử". Trong Node có một cách đơn giản để hiển thị thông báo này nếu bạn cần cảnh báo đến người khác dùng một hàm sắp bị ngừng hỗ trợ.
const util = require('util');
function oldFunction() {
console.log('This function is deprecated!');
}
const deprecatedFunction = util.deprecate(oldFunction, 'oldFunction() is deprecated. Use newFunction() instead.');
Chỉ cần "wrap" oldFunction
vào trong util.deprecate
. Mỗi khi gọi oldFunction
, dòng thông báo sẽ hiện ra trong màn hình console.
Từ ES6, chúng ta đã có thêm nhiều hàm để kiểm tra kiểu dữ liệu là một boolean, một array, một object...
Trong thư viện util
, có một thuộc tính types
giúp mở rộng thêm khả năng kiểm tra loại dữ liệu.
Ví dụ:
console.log(util.types.isPromise(Promise.resolve())); // true
console.log(util.types.isRegExp(/abc/)); // true
console.log(util.types.isDate(new Date())); // true
Danh sách đầy đủ tại util.types | Node.js documentation.
isDeepStrictEqual
là cách nhanh nhất để so sánh 2 đối tượng có giống y hệt nhau hay không.
const util = require('util');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
console.log(util.isDeepStrictEqual(obj1, obj2)); // true
Ngoài ra, util
còn cung cấp nhiều hàm tiện ích khác nữa như util.styleText
để định dạng cho văn bản được in ra trong console; util.parseEnv
giúp đọc nội dung của biến môi trường trong tệp .env thường gặp.
Tham khảo:
Bí mật ngăn xếp của Blog
Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!
Đăng ký nhận thông báo bài viết mới
Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.
Bình luận (0)