آموزش promise در برنامه نویسی Node.js

آموزش promise در برنامه نویسی Node.js

درخدمت شما هستیم با آموزش promise در برنامه نویسی Node.js از وب سایت آموزش برنامه نویسی سورس باران. در این جلسه که بخش ششم آموزش Node.js است معرفی و آشنایی کامل با promise در Node.js را خواهیم داشت.در آموزش های قبلی ، توابع پاسخ برگشتی را می دیدید که برای رویدادهای ناهمگام(Asynchronous) استفاده می شوند. اما بعضی اوقات توابع برگشت پذیر زمانی که  تو در تو می شوند ، تبدیل به کابوس شوند و برنامه طولانی و پیچیده می شود.

آموزش promise در برنامه نویسی Node.js

  •  promise چیست؟

  • ارجاع به promise ها

  • پرداختن به  promise های تو در تو

  • ایجاد یک promise سفارشی

 

Promise ها چیستند؟

قبل از شروع آموزش promise در برنامه نویسی Node.js ، ابتدا اجازه دهید توابع «برگشتی» در Node.js. را دوباره مرور کنیم. ما در فصل های قبلی این توابع برگشت پذیر را بسیار دیدیم ، بنابراین بیایید به سرعت یکی از آنها را مرور کنیم. مثال زیر یک قطعه کد را نشان می دهد ، که برای اتصال به یک پایگاه داده MongoDB و انجام یک عملیات به روز رسانی در یکی از سوابق موجود در پایگاه داده استفاده می شود.

Node.js Promise Tutorial

  1. در کد بالا ، بخشی از تابع (err ,db) به عنوان یک تابع ناشناس یا برگشتی شناخته شده است. هنگامی که MongoClient اتصال به بانک اطلاعاتی MongoDB ایجاد می کند ، پس از اتمام تابع اتصال ، به تابع برگشتی باز می گردد. بنابراین به یک معنا ، عملیات اتصال در پس زمینه اتفاق می افتد ، و هنگامی که این کار انجام شد ، آن را تابع برگشتی  می نامند. به یاد داشته باشید که این یکی از نکات کلیدی Node.js است که اجازه می دهد بسیاری از عملیات به طور همزمان اتفاق بیفتد و در نتیجه هیچ کاربری مانع از انجام یک عملیات نشود.
  2. تیکه کد دوم همان چیزی است که وقتی دقیقا تابع برگشتی خوانده می شود ، اجرا می شود. تابع برگشتی فقط یک رکورد را در پایگاه داده 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 ها را نیز شامل شود.

Node.js Promise Tutorial

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"
            }
        });
    });

توضیح کد:

  1. بخش اول شامل ماژول ” promise ” است که به ما امکان می دهد از قابلیت های promise در کد خود استفاده کنیم.
  2. اکنون می توانیم تابع ” then ” را به تابع  MongoClient.connect خود اضافه کنیم. آنچه این کار را انجام می دهد این است که وقتی اتصال به دیتابیس برقرار شد ، باید قطعه کد را که پس از آن تعریف شده است ، اجرا کنیم.
  3. در آخر ، ما قطعه کد خود را تعریف می کنیم که کار به روزرسانی EmployeeName کارمند با نام “Martin” را به “Mohan” انجام می دهد.

توجه داشته باشید:

اگر محتویات پایگاه داده MongoDB خود را بررسی کنید ، می فهمید که اگر رکوردی با EmployeeName از “Martin” وجود داشته باشد ، به “Mohan” به روز می شود. برای بررسی اینکه داده ها به درستی در پایگاه داده درج شده است ، باید دستورات زیر را در MongoDB اجرا کنید.

  1. از EmployeeDB استفاده کنید.
  2. ({Employee.find({EmployeeName :Mohan

اولین جمله اطمینان می دهد که شما به پایگاه داده EmployeeDb متصل هستید. جمله دوم رکوردی را که نام کارمند “Mohan” دارد جستجو می کند.

 

پرداختن به promise های تو در تو

هنگام تعریف promise ها ، لازم به ذکر است که روش “then” خود یک  promise را بر می گرداند. بنابراین به یک معنا ، promise ها می توانند در یکدیگر تو در تو یا زنجیر شوند. در مثال زیر ، ما از زنجیر کردن برای تعریف 2 تابع برگشتی استفاده می کنیم ، که هر دو رکورد را در پایگاه داده MongoDB درج می کنیم.

(توجه: زنجیر کردن مفهومی است که برای لینک کردن روشها به یکدیگر استفاده می شود. فرض کنید اگر برنامه شما، 2 روش داشت به نام های “متد1” و “متد2”. و منطق به گونه ای بود که “متد2” باید پس از “متد1” شناخته شود. سپس شما باید زنجیره را به گونه‌ای انجام دهید که “متد2” مستقیماً پس از “متد1”  فراخوانی شود.)

نکته مهم در این مثال این است که کد با استفاده از promiseهای تو در تو ،تمیز تر ، قابل خواندن و نگهداری می شود.

Node.js Promise Tutorial

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"
        })
    })
});

توضیح کد:

  1. اکنون 2 کلاس “then” را تعریف می کنیم که یکی پس از دیگری اجرا می شوند. در اولین کلاس “then” ، ما در حال عبور از پارامتر “db” هستیم که شامل اتصال به بانک اطلاعاتی ما است. سپس از ویژگی جمع آوری اتصال “db” برای درج رکود در مجموعه “Employee” استفاده می کنیم. از روش “insertOne” برای درج سند واقعی در مجموعه کارمندان استفاده می شود.
  2. سپس ازدومین کلاس “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”   سفارشی استفاده می شود ، تعریف کنید.

Node.js Promise Tutorial

توضیح کد:

  1. قطعه اول ، شامل کتابخانه “q” با استفاده از کلمه کلیدی require است. با استفاده از این کتابخانه ، ما می توانیم هر تابعی را به صورت بازگشتی تعریف کنیم.
  2. ما در حال ایجاد تابعی به نام Add هستیم که 2 عدد تعریف شده در متغیرهای a و b را اضافه می کنیم. جمع این مقادیر در متغیر c ذخیره می شود.
  3. سپس ما از کتابخانه q برای “تغییرشکل دادن” استفاده می کنیم (روشی که برای تبدیل هر تابع به یک تابع  دیگر برای بازگرداندن”promise” استفاده می شود) تابع Add ما  یا در غیر این صورت ،تغییر تابع Add ما ، به یک تابعی که “promise”را برمی گرداند.
  4. اکنون ما تابع “َ Add ” خود را صدا می کنیم و به دلیل مرحله قبلی که ما از تغییر تابع ” Add ” استفاده کرده ایم می توانیم مقدار “promise”بازگشتی را بدست آوریم.
  5. کلمه کلیدی ” then” استفاده می شود که اگر تابع با موفقیت انجام شود ، سپس رشته “Addition function complete” را در log نمایش دهد.

در آموزش promise در برنامه نویسی Node.js با اجرای کد بالا ، خروجی  “Addition function completed” مطابق شکل زیر در console.log نمایش داده می شود.

Node.js Promise Tutorial

خلاصه

  • استفاده از توابع بازگشتی در Node.js دارای معایبی است. گاهی اوقات در طی فرایند رشد وتوسعه ، استفاده تو در تو از توابع بازگشتی می تواند کد گذاری را شلوغ و حفظ آن را دشوار کند.
  • بسیاری از مسائل مربوط به توابع پاسخ بازگشتی تو در تو، را می توان با استفاده از Promise ها و مولد ها در Node.js کاهش داد.
  • Promise، مقداری است که توسط یک تابع ناهمزمان برگردانده شده و نشانگر اتمام پردازش انجام شده توسط تابع غیرهمزمان است.
  • Promise ها می توانند درون یکدیگر تو درتو شوند ، تابهتر بتوانیم کد را حفظ کنیم زمانی که تابعی ناهمزمان به دنبال یک تابع ناهمزمان دیگر باشد.

لیست تمامی جلسات آموزش Node.js

  1. آموزش Node.js در ۳ روز: آشنایی با Node.js
  2. آموزش دانلود و نصب Node.js -NPM در ویندوز
  3. آموزش Node.js در ۳ روز: ایجاد،انتشار،گسترش و مدیریت در Node.js
  4. آموزش HTTP در Node.js + ایجاد سرور و دریافت داده
  5. آموزش فریم ورک Express در Node.js در ۱۰ دقیقه
  6. آموزش promise در برنامه نویسی Node.js
  7. آموزش تولید promise با کتابخانه BlueBird در Node.js
  8. آموزش Generators در Node.js و مقایسه با توابع Callbacks
  9. آموزش جریان داده یا Streams در Node.js : کار با Filestream و Pipes در Node.js
  10. آموزش تست Node.js با Jasmine
  11. تفاوت Node.Js و AngulrJS
  12. تفاوت Node js و Python
  13. آموزش MongoDB در Node.js
  14. کتاب آموزش Node.js برای مبتدی ها بصورت کاملا گویا
به این مطلب امتیاز دهید post

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.

بزرگترین و جدید ترین مجموعه آموزشی برنامه نویسی به زبان اصلی

دسته بندی موضوعات

آخرین محصولات فروشگاه

مشاهده همه

نظرات

بازخوردهای خود را برای ما ارسال کنید

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.