اختر لونك:
وَقُلِ اعْمَلُوا فَسَيَرَى اللَّهُ عَمَلَكُمْ وَرَسُولُهُ وَالْمُؤْمِنُونَ ۖ وَسَتُرَدُّونَ إِلَىٰ عَالِمِ الْغَيْبِ وَالشَّهَادَةِ فَيُنَبِّئُكُم بِمَا كُنتُمْ تَعْمَلُونَ [ التوبة : ( 105 )] كلمة الإدارة

يرجى إختيار القسم المناسب قبل النشر وسيعاقب المخالف بإنذار أول مرة وسيتم حظره إذا تكرر ذلك كلمة الإدارة

يُمنع كتابة مواضيع السحر والشعوذة والروحانيات والابراج بكافة الأشكال والمخالف سيعاقب بحظر مؤقت وإذا تكرر سيكون حظر دائم تنبيه هام جداً



أضف رد جديد
 
LinkBack أدوات الموضوع انواع عرض الموضوع

قديم 07-04-2019, 06:07 PM   #1
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
افتراضي ما هو الفرق بين الوعود والكولباك في الجافاسكريبت ؟

إذا كنت مبرمج جافاسكريبت محترف فمن المؤكد أنه سبق لك أن عملت بدوال الإجابة Callbacks وفي بعض الحالات تكون مجبرا على استعمال دالة إجابة داخل دالة إجابة داخل دالة إجابة وهكذا (بالخصوص عند التعامل مع أوامر غير متزامنة Asynchronous كعمليات الأجاكس والتعامل مع الملفات وقواعد البيانات إلخ…) حتى تحصل على شفرة برمجية هرمية الشكل ومعقدة نسبيا كما سترى في الكود التالي :
function isUserTooYoung(id, callback) { openDatabase(function(db) { getCollection(db, 'users', function(col) { find(col, {'id': id},function(result) { result.filter(function(user) { callback(user.age < 18) } } } } }
1
2
3
4
5
6
7
8
9
10
11

function isUserTooYoung(id, callback) {
openDatabase(function(db) {
getCollection(db, 'users', function(col) {
find(col, {'id': id},function(result) {
result.filter(function(user) {
callback(user.age < 18)
}
}
}
}
}



الدالة isUserTooYoung تمكننا من التأكد من كون مستعمل معين راشد (يفوق عمره 18 سنة)، ولهذا يتم ربط الإتصال بقاعدة البيانات، ثم البحث عن المستعمل المراد معرفة عمره وفي الأخير نقوم بالتأكد من العمر.
استعمال الوعود Promises

استعمال الوعود Promises سنرى بأنه يعطينا شفرة برمجية أوضح وأبسط وأكثر دلالية، فكل دالة تنتظر جوابا تتوفر على الدالة then التي تلتقط الإجابة من الدالة التي قبلها وتمررها للدالة الثانية بداخلها، وبهذه المفهوم أصبح بإمكاننا إعادة كتابة الكود السابق بطريقة مغايرة أكثر أناقة كما يلي :
function isUserTooYoung(id) { return openDatabase(db) .then(getCollection) .then(find.bind(null, {'id': id})) .then(function(user) { return user.age < 18; }); }
1
2
3
4
5
6
7
8

function isUserTooYoung(id) {
return openDatabase(db)
.then(getCollection)
.then(find.bind(null, {'id': id}))
.then(function(user) {
return user.age < 18;
});
}



هذا كود في Node.js ولكن الفكرة والعملية تظل صحيحة بالنسبة للتطبيقات الأخرى للجافاسكريبت.
بالتأكيد الآن أصبح الكود أكثر وضوحا بالنسبة لكم وأسهل من حيث الفهم، حيث يمكننا القول بأن الدالة openDatabase وعدت الدالة getCollection بالتوصل بمعطيات معينة Datas بعد نجاح الإتصال بقاعدة البيانات، ولو أردنا استعمال الدالة isUserTooYoung في برنامجنا بعد ذلك فسيكون بهذه الطريقة :
isUserTooYoung(id) .then(function(result) { // هنا يمكنك التعامل مع النتيجة النهائيةresult }
1
2
3
4

isUserTooYoung(id)
.then(function(result) {
// هنا يمكنك التعامل مع النتيجة النهائيةresult
}



لا تنسى أن هناك دوالا أخرى مفيدة عند استعمال الوعود في الجافاسكريبت مثل دالة catch التي يتم استدعاؤها عند عدم نجاح إحدى العمليات أو الوعود.
هناك العديد من المكتبات التي تمكننا من العمل بالوعود Promises بسهولة وفعالية أكبر لعل أشهرها :
  • Q
  • When
  • WinJS
  • RSVP.js


raheel غير متواجد حالياً   اقتباس
أضف رد جديد


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
ما هو معني function overloading في لغة الجافاسكريبت raheel قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 07-04-2019 06:10 PM
ما هو الفرق بين NativeScript و React Native raheel قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 01-04-2019 07:16 PM
ما هو الفرق بين Two-way data binding و One-way data binding raheel قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 01-04-2019 06:44 PM
الفرق بين WordPress.org و WordPress.com شرح شامل القيصر قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress 0 11-03-2019 05:39 AM
الفرق بين السنة والعام العبوق المواضيع العامة 0 17-11-2018 07:03 PM


الساعة الآن 11:37 AM

 


Content Relevant URLs by vBSEO ©2010, Crawlability, Inc.