درخدمت شما هستیم با آموزش promise در برنامه نویسی Node.js از وب سایت آموزش برنامه نویسی سورس باران. در این جلسه که بخش ششم آموزش Node.js است معرفی و آشنایی کامل با promise در Node.js را خواهیم داشت.در آموزش های قبلی ، توابع پاسخ برگشتی را می دیدید که برای رویدادهای ناهمگام(Asynchronous) استفاده می شوند. اما بعضی اوقات توابع برگشت پذیر زمانی که تو در تو می شوند ، تبدیل به کابوس شوند و برنامه طولانی و پیچیده می شود.
آموزش promise در برنامه نویسی Node.js
promise چیست؟
ارجاع به promise ها
پرداختن به promise های تو در تو
ایجاد یک promise سفارشی
Promise ها چیستند؟
قبل از شروع آموزش promise در برنامه نویسی Node.js ، ابتدا اجازه دهید توابع «برگشتی» در Node.js. را دوباره مرور کنیم. ما در فصل های قبلی این توابع برگشت پذیر را بسیار دیدیم ، بنابراین بیایید به سرعت یکی از آنها را مرور کنیم. مثال زیر یک قطعه کد را نشان می دهد ، که برای اتصال به یک پایگاه داده MongoDB و انجام یک عملیات به روز رسانی در یکی از سوابق موجود در پایگاه داده استفاده می شود.
- در کد بالا ، بخشی از تابع (err ,db) به عنوان یک تابع ناشناس یا برگشتی شناخته شده است. هنگامی که MongoClient اتصال به بانک اطلاعاتی MongoDB ایجاد می کند ، پس از اتمام تابع اتصال ، به تابع برگشتی باز می گردد. بنابراین به یک معنا ، عملیات اتصال در پس زمینه اتفاق می افتد ، و هنگامی که این کار انجام شد ، آن را تابع برگشتی می نامند. به یاد داشته باشید که این یکی از نکات کلیدی Node.js است که اجازه می دهد بسیاری از عملیات به طور همزمان اتفاق بیفتد و در نتیجه هیچ کاربری مانع از انجام یک عملیات نشود.
- تیکه کد دوم همان چیزی است که وقتی دقیقا تابع برگشتی خوانده می شود ، اجرا می شود. تابع برگشتی فقط یک رکورد را در پایگاه داده MongoDB ما به روز می کند.
پس یک promise چیست؟ خوب ، یک promise فقط جهت بهبود توابع برگشتی در Node.js است. در طول چرخه رشد و توسعه، ممکن است مثالی وجود داشته باشد که شما نیاز به توابع برگشت پذیر چندگانه تو در تو با هم داشته باشید. حفظ آن در یک نقطه معین از زمان می تواند کمی شلوغ کننده و دشوار باشد . به طور خلاصه ، یک promise ، بهبود دهنده توابع برگشتی و به دنبال کاهش این مشکلات است.
ترکیب اصلی promise در زیر نشان داده شده است.
var promise = doSomethingAync() promise.then(onFulfilled, onRejected)
- “doSomethingAync” هرگونه تابع برگشتی یا ناهمزمان است که یک سری پردازش را انجام می دهد.
- این بار ، هنگام تعریف تابع برگشتی ، مقداری را برمی گرداند که به آن ” promise ” گفته می شود.
- هنگامی که یک “promise “برگردانده شود ، می تواند 2 خروجی داشته باشد. این توسط کلاس” then ” پس از آن تعریف شده است. در هر صورت این عمل می تواند موفق باشد که با پارامتر ‘onFulfilled’ مشخص می شود. یا می تواند خطایی داشته باشد که توسط پارامتر “onRejected” مشخص شده باشد.
توجه: وجه اصلی promise ،مقداربازگشتی است. هیچ مفهومی به عنوان مقدار بازگشتی هنگام کار با توابع برگشتی عادی در Node.js وجود ندارد. به دلیل مقدار بازگشتی ، ما کنترل بیشتری در مورد نحوه تعریف تابع برگشتی داریم. در مبحث بعدی ، نمونه ای از promise و مزیت آنها در توابع برگشتی را خواهیم دید.
ارجاع به promise ها
حال بیایید در آموزش promise در برنامه نویسی Node.js نمونه ای از چگونگی استفاده از ” promise ” را از داخل برنامه Node.js مرور کنیم. برای استفاده از promise ها در برنامه Node.js ، ابتدا باید ماژول ” promise ” بارگیری و نصب شود. سپس کد خود را مطابق شکل زیر اصلاح خواهیم کرد که با استفاده از promise ها ، یک Employeename را در مجموعه “Employee” به روز می کند.
مرحله 1) نصب ماژول های NPM
برای استفاده از promise های درون برنامه Node JS ، ماژول promise مورد نیاز است. برای نصب ماژول promise ، دستور زیر را اجرا کنید.
npm install promise
مرحله 2) کد را اصلاح کنید تا promise ها را نیز شامل شود.
var Promise = require('promise'); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url) .then(function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "Martin" }, { $set: { "EmployeeName": "Mohan" } }); });
توضیح کد:
- بخش اول شامل ماژول ” promise ” است که به ما امکان می دهد از قابلیت های promise در کد خود استفاده کنیم.
- اکنون می توانیم تابع ” then ” را به تابع MongoClient.connect خود اضافه کنیم. آنچه این کار را انجام می دهد این است که وقتی اتصال به دیتابیس برقرار شد ، باید قطعه کد را که پس از آن تعریف شده است ، اجرا کنیم.
- در آخر ، ما قطعه کد خود را تعریف می کنیم که کار به روزرسانی EmployeeName کارمند با نام “Martin” را به “Mohan” انجام می دهد.
توجه داشته باشید:
اگر محتویات پایگاه داده MongoDB خود را بررسی کنید ، می فهمید که اگر رکوردی با EmployeeName از “Martin” وجود داشته باشد ، به “Mohan” به روز می شود. برای بررسی اینکه داده ها به درستی در پایگاه داده درج شده است ، باید دستورات زیر را در MongoDB اجرا کنید.
- از EmployeeDB استفاده کنید.
- ({Employee.find({EmployeeName :Mohan
اولین جمله اطمینان می دهد که شما به پایگاه داده EmployeeDb متصل هستید. جمله دوم رکوردی را که نام کارمند “Mohan” دارد جستجو می کند.
پرداختن به promise های تو در تو
هنگام تعریف promise ها ، لازم به ذکر است که روش “then” خود یک promise را بر می گرداند. بنابراین به یک معنا ، promise ها می توانند در یکدیگر تو در تو یا زنجیر شوند. در مثال زیر ، ما از زنجیر کردن برای تعریف 2 تابع برگشتی استفاده می کنیم ، که هر دو رکورد را در پایگاه داده MongoDB درج می کنیم.
(توجه: زنجیر کردن مفهومی است که برای لینک کردن روشها به یکدیگر استفاده می شود. فرض کنید اگر برنامه شما، 2 روش داشت به نام های “متد1” و “متد2”. و منطق به گونه ای بود که “متد2” باید پس از “متد1” شناخته شود. سپس شما باید زنجیره را به گونهای انجام دهید که “متد2” مستقیماً پس از “متد1” فراخوانی شود.)
نکته مهم در این مثال این است که کد با استفاده از promiseهای تو در تو ،تمیز تر ، قابل خواندن و نگهداری می شود.
var Promise = require('promise'); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url) .then(function(db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }) .then(function(db1) { db1.collection('Employee').insertOne({ Employeeid: 5, EmployeeName: "NewEmployee1" }) }) });
توضیح کد:
- اکنون 2 کلاس “then” را تعریف می کنیم که یکی پس از دیگری اجرا می شوند. در اولین کلاس “then” ، ما در حال عبور از پارامتر “db” هستیم که شامل اتصال به بانک اطلاعاتی ما است. سپس از ویژگی جمع آوری اتصال “db” برای درج رکود در مجموعه “Employee” استفاده می کنیم. از روش “insertOne” برای درج سند واقعی در مجموعه کارمندان استفاده می شود.
- سپس ازدومین کلاس “then” برای وارد کردن رکورد دیگر به پایگاه داده استفاده می کنیم. اگر محتویات پایگاه داده MongoDB خود را بررسی کنید ، 2 پرونده درج شده در پایگاه داده MongoDB را پیدا خواهید کرد.
ایجاد یک” promise” سفارشی
یک “promise”سفارشی با استفاده از یک ماژول نود به نام “q” ایجاد می شود. کتابخانه “q” باید با استفاده از مدیریت بسته نود بارگیری و نصب شود. پس از استفاده از کتابخانه “q” ، می توان از روش “denodeify” (تغییر شکل دادن) نام برد که باعث می شود هر تابع به یک تابع تبدیل شود که promise” را برگرداند.
در مثال زیر ، یک تابع ساده با نام “Add” ایجاد خواهیم کرد که 2 عدد را اضافه می کند. ما این تابع را به یک تابع دیگر تبدیل خواهیم کرد تا یک promise”” را برگردانیم. پس از اتمام این کار ، ما از promise” که توسط تابع اضافه شده است برای نمایش پیام در Console.log استفاده می کنیم. برای بازگرداندن یک promise” ، مراحل زیر را برای ایجاد توابع سفارشی خود دنبال خواهیم کرد.
مرحله 1) نصب ماژول های NPM
برای استفاده از “q” از داخل یک برنامه Node JS ، ماژول “q” لازم است. برای نصب ماژول “q” ، دستور زیر را اجرا کنید.
npm install q
مرحله 2) کد زیر را که برای ایجاد “promise” سفارشی استفاده می شود ، تعریف کنید.
توضیح کد:
- قطعه اول ، شامل کتابخانه “q” با استفاده از کلمه کلیدی require است. با استفاده از این کتابخانه ، ما می توانیم هر تابعی را به صورت بازگشتی تعریف کنیم.
- ما در حال ایجاد تابعی به نام Add هستیم که 2 عدد تعریف شده در متغیرهای a و b را اضافه می کنیم. جمع این مقادیر در متغیر c ذخیره می شود.
- سپس ما از کتابخانه q برای “تغییرشکل دادن” استفاده می کنیم (روشی که برای تبدیل هر تابع به یک تابع دیگر برای بازگرداندن”promise” استفاده می شود) تابع Add ما یا در غیر این صورت ،تغییر تابع Add ما ، به یک تابعی که “promise”را برمی گرداند.
- اکنون ما تابع “َ Add ” خود را صدا می کنیم و به دلیل مرحله قبلی که ما از تغییر تابع ” Add ” استفاده کرده ایم می توانیم مقدار “promise”بازگشتی را بدست آوریم.
- کلمه کلیدی ” then” استفاده می شود که اگر تابع با موفقیت انجام شود ، سپس رشته “Addition function complete” را در log نمایش دهد.
در آموزش promise در برنامه نویسی Node.js با اجرای کد بالا ، خروجی “Addition function completed” مطابق شکل زیر در console.log نمایش داده می شود.
خلاصه
- استفاده از توابع بازگشتی در Node.js دارای معایبی است. گاهی اوقات در طی فرایند رشد وتوسعه ، استفاده تو در تو از توابع بازگشتی می تواند کد گذاری را شلوغ و حفظ آن را دشوار کند.
- بسیاری از مسائل مربوط به توابع پاسخ بازگشتی تو در تو، را می توان با استفاده از Promise ها و مولد ها در Node.js کاهش داد.
- Promise، مقداری است که توسط یک تابع ناهمزمان برگردانده شده و نشانگر اتمام پردازش انجام شده توسط تابع غیرهمزمان است.
- Promise ها می توانند درون یکدیگر تو درتو شوند ، تابهتر بتوانیم کد را حفظ کنیم زمانی که تابعی ناهمزمان به دنبال یک تابع ناهمزمان دیگر باشد.
لیست تمامی جلسات آموزش Node.js
- آموزش Node.js در ۳ روز: آشنایی با Node.js
- آموزش دانلود و نصب Node.js -NPM در ویندوز
- آموزش Node.js در ۳ روز: ایجاد،انتشار،گسترش و مدیریت در Node.js
- آموزش HTTP در Node.js + ایجاد سرور و دریافت داده
- آموزش فریم ورک Express در Node.js در ۱۰ دقیقه
- آموزش promise در برنامه نویسی Node.js
- آموزش تولید promise با کتابخانه BlueBird در Node.js
- آموزش Generators در Node.js و مقایسه با توابع Callbacks
- آموزش جریان داده یا Streams در Node.js : کار با Filestream و Pipes در Node.js
- آموزش تست Node.js با Jasmine
- تفاوت Node.Js و AngulrJS
- تفاوت Node js و Python
- آموزش MongoDB در Node.js
- کتاب آموزش Node.js برای مبتدی ها بصورت کاملا گویا
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- منبع : سورس باران
- رمز فايل : www.sourcebaran.com
- انتشار: ۱۷ مهر ۱۳۹۸
دسته بندی موضوعات
- آموزش برنامه نویسی
- آموزش کریپتو کارنسی (ارز دیجیتال)
- آموزش متنی برنامه نویسی
- پروژه برنامه نویسی
- فروشگاه
- فیلم های آموزشی
- #F
- ++C
- 3ds max
- Ada
- ADO.NET
- Adobe Flash
- Agile
- Ajax
- AngularJS
- Anime Studio
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- assembly
- AVR
- Azure
- Bootstrap
- Cassandra
- CCNA
- CCNP
- CCSP
- ChatGPT
- Cisco
- CMD
- COBOL
- CSS
- Cython
- Django
- Dreameaver
- Elixir
- EntityFramework
- Erlang
- Flash
- Go
- Groovy
- Haskell
- Htaccess
- HTML
- IOS
- Jade
- jquery
- Kendo UI
- Linq
- Linux
- LUA
- MariaDB
- maya
- Meteor
- MongoDB
- Mono Android
- MonoGame
- Mysql
- NoSQL
- Oracle
- Orchard
- Perl
- php
- PHPMyAdmin
- R
- Rational Rose
- Ruby
- Rust
- Scala
- Scrum Master
- SFML
- SharePoint
- SignalR
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- Vue 3
- WPF
- Xml
- آردوینو
- آموزش های پروژه محور
- آیونیک
- اتوکد
- الگوریتم تقریبی
- الگوریتم نویسی و فلوچارت
- امنیت
- اندروید
- اندروید استودیو
- انیمیشن سازی
- بازی سازی با Scratch
- بک ترک
- بیسیک فور اندروید
- پایتون
- پرولوگ
- پریمیر
- جاوا
- جاوا اسکریپت
- جنگو
- جوملا
- دارت
- دلفی
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- ساخت اتوران
- ساختمان داده ها
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کاتلین
- کامپایلرها
- کانستراکت
- کریستال ریپورت
- کلوژر
- گوگل آنالیتیکس
- گیت
- لاراول
- مای بی بی
- مایکروسافت پروجکت
- متریال دیزاین
- متلب
- معماری کامپیوتر
- مهندسی اینترنت
- میکروتیک
- نود جی اس
- نیوک
- هوش مصنوعی
- ویبولوتین
- ویژوال استودیو
- یونیتی
- کتاب های آموزشی
- Ada
- Ajax
- Android
- ASP.NET
- ASP.NET Core
- AVR
- clips
- CNC
- COBOL
- CQRS
- Cython
- Dreamweaver
- Elixir
- Entity Framework 4.0
- Erlang
- Go
- Groovy
- Haskell
- LINQ
- Lua
- Matlab
- MFC
- Node.js
- PERL
- php
- PLC
- Prolog
- React
- Rust
- Scala
- SFML
- SharePoint
- silver light
- VHDL
- VMware
- WinJS
- Workflow
- WPF
- XHTML
- Yii Framework
- اتوکد
- اچ تی ام ال
- اسمبلی
- اکتیو ایکس
- الگوریتم و فلوچارت
- انگولار
- اوبونتو
- اوراکل
- بازی سازی
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- بک ترک
- پاسکال
- پایان نامه
- پایتون
- پرولوگ
- جاوا
- جاوا اسکریپت
- جی کوئری
- حوملا
- داده کاوی
- دلفی
- رباتیک
- روبی
- زبان ماشین
- سئو
- ساختمان داده ها
- سایر کتاب ها
- سخت افزار
- سوئیفت
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- سیستم عامل
- سیستم های خبره
- شبکه و مجازی سازی
- شبیه سازی کامپیوتر
- طراحی الگوریتم
- فتوشاپ
- فریم ورک گتنا
- کاتلین
- کالی لینوکس
- کریستال ریپورت
- گزارش کارآموزی
- گوگل
- لیسپ
- متلب
- مقاله
- مهندسی نرم افزار
- نیوک
- هوش مصنوعی
- وب مستر
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس