در این مقاله، ما قصد داریم در مورد دستور util.promisify در Node.js صحبت کنیم. این دستور یکی از قابلیت‌های مهم Node.js است که به توسعه‌دهندگان اجازه می‌دهد تا توابعی را که از الگوی callback استفاده می‌کنند را به صورت Promise-based تبدیل کنند. قبل از معرفی دستور util.promisify، باید به موضوعی که به آن پرداخته می‌شود، یعنی الگوی callback در Node.js، بپردازیم. در Node.js، معمولاً توابعی که عملیاتی نیاز دارند که زمان زیادی برای اجرا و یا انجام شدن آن‌ها صرف می‌شود، از الگوی callback استفاده می‌کنند. این الگو به وسیله یک تابع callback که به عنوان آرگومان آخر به تابع اصلی ارسال می‌شود، عملیات نهایی را انجام می‌دهد. این تابع callback در زمانی که عملیات انجام شود، صدا زده می‌شود و نتیجه عملیات به عنوان آرگومان به آن ارسال می‌شود. اما استفاده از الگوی callback ممکن است باعث بوجود آمدن کدهای پیچیده و سخت خوان شود، به ویژه زمانی که نیاز به پیوستگی چندین عملیات با هم در یک تابع دارید. برای مثال، فرض کنید که شما نیاز دارید تا یک فایل را از دیسک خوانده و سپس نتیجه را به صورت یک رشته برگردانید. با استفاده از الگوی callback، کد شما ممکن است به صورت زیر باشد: ```javascript const fs = require('fs'); fs.readFile('file.txt', 'utf8', (err, data) => { if (err) { console.error(err); return; } console.log(data); }); ``` این کد، فایل 'file.txt' را از دیسک می‌خواند و در صورت عدم وجود خطا، محتوای آن را در کنسول چاپ می‌کند. اما اگر نیاز داشته باشید که چندین عملیات مانند این را انجام دهید، کد شما پیچیده‌تر و سخت خوان‌تر خواهد شد. در اینجا مدخل util.promisify وارد می‌شود. این دستور از پیش تعریف شده در Node.js است که به توسعه‌دهندگان اجازه می‌دهد تا تابعی که الگوی callback را دارد را به صورت Promise-based تبدیل کنند. با استفاده از این دستور، می‌توانید تابعی را که از الگوی callback استفاده می‌کند را به صورت زیر نوشته و استفاده کنید: ```javascript const fs = require('fs'); const util = require('util'); const readFilePromise = util.promisify(fs.readFile); readFilePromise('file.txt', 'utf8') .then(data => { console.log(data); }) .catch(err => { console.error(err); }); ``` در این کد، ابتدا تابع fs.readFile را با استفاده از دستور util.promisify به صورت Promise-based تبدیل می‌کنیم و آن را در متغیری با نام readFilePromise ذخیره می‌کنیم. سپس با فراخوانی تابع readFilePromise و استفاده از روش‌های then و catch بر روی آن، می‌توانیم نتیجه عملیات را به صورت یک Promise دریافت کنیم. در این حالت، در صورتی که خطایی رخ دهد، از catch استفاده می‌کنیم تا خطا را نمایش دهیم. استفاده از دستور util.promisify به توسعه‌دهندگان اجازه می‌دهد که کدهای پیچیده‌تر را به صورت ساده‌تر و قابل فهم‌تری نوشته و مدیریت کنند. همچنین، این دستور به توسعه‌دهندگان امکان استفاده از توابع async/await را می‌دهد که کد را همچنین ساده‌تر و خواناتر می‌کند. در این مقاله، به بررسی دستور util.promisify در Node.js پرداختیم و نحوه استفاده از آن را نشان دادیم. این دستور به توسعه‌دهندگان اجازه می‌دهد تا توابعی را که از الگوی callback استفاده می‌کنند را به صورت Promise-based تبدیل کنند و کدهای پیچیده‌تر را به صورت ساده‌تر و قابل فهم‌تری نوشته و مدیریت کنند.