الفرق بين المراجعتين ل"jQuery/deferred/then"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التابع <code>deferred.state()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎</code>‎‎‎‎‎‎‎‎‎‎‎‎‎‎...')
 
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:التابع <code>deferred.state()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎</code>‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery}}</noinclude>
+
<noinclude>{{DISPLAYTITLE:التابع <code>deferred.then()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎</code>‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery}}</noinclude>
== ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎deferred.state()‎ ==
+
== ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎deferred.then( doneFilter [, failFilter ] [, progressFilter ] )‎ ==
  
 
=== القيمة المعادة ===
 
=== القيمة المعادة ===
يُعيد كائنًا من النوع [[JavaScript/String|String]].
+
يُعيد كائنًا من النوع [[JavaScript/Promise|Promise]].
  
=== الوصف ===
+
==== الوصف ====
يُحدد هذا التابع الحالة الحالية لكائن مؤجل.
+
إضافة معالجات يتم استدعاؤها عند حل الكائن المؤجل أو رفضه أو ما زال قيد التقدم.
  
=== <code>deferred.state()‎</code> ===
+
<code>deferred.then( doneFilter [, failFilter ] [, progressFilter ] )‎</code>
أُضيف مع الإصدار: [http://api.jquery.com/category/version/1.7/ 1.7].
 
  
هذا التابع لا يقبل أي وسائط.
+
أُضيف مع الإصدار: [http://api.jquery.com/category/version/1.8/ 1.8].
  
يعيد التابع <code>deferred.state()‎</code> سلسلة نصية تمثل الحالة الحالية للكائن المؤجل. يمكن أن يكون الكائن المؤجل في إحدى الحالات الثلاث:
+
==== <code>doneFilter</code> ====
* "معلق pending" : الكائن المؤجل ليس في حالة مكتملة (لا "مرفوض" ولا "مقبول").
+
هو دالة تُستدعى عند قبول الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
* "مقبول resolved" : الكائن المؤجل موجود في حالة قبول، مما يعني استدعاء التابع <code>[[jQuery/deferred/resolve|deferred.resolve()]]</code> أو التابع <code>[[jQuery/deferred/resolveWith|deferred.resolveWith()‎]]</code> للكائن واستدعاء الدالة <code>doneCallbacks</code> (أو قيد الاستدعاء).
 
* "مرفوض" : الكائن المؤجل موجود في حالة الرفض، مما يعني استدعاء التابع <code>[[jQuery/deferred/reject|deferred.reject()‎]]</code> أو التابع <code>[[jQuery/deferred/rejectWith|deferred.rejectWith()‎]]</code> للكائن واستدعاء الدالة <code>failCallbacks</code> (أو قيد الاستدعاء).
 
هذه الطريقة مفيدة في المقام الأول لتصحيح الأخطاء، على سبيل المثال، لتحديد ما إذا كان الكائن المؤجل قد قُبل بالفعل على الرغم من أنك داخل شيفرة مُعدَّة لرفضه.
 
  
== مصادر ==
+
==== <code>failFilter</code> ====
[http://api.jquery.com/deferred.state/ صفحة التابع ‎deferred.state()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في توثيق jQuery الرسمي].
+
هو دالة اختيارية تُستدعى عند رفض الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
 +
 
 +
==== <code>progressFilter</code> ====
 +
هو دالة إختيارية تُستدعى عند إرسال إشعارات التقدُّم للكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
 +
 
 +
<code>deferred.then( doneCallbacks, failCallbacks )‎</code>
 +
 
 +
أُضيف مع الإصدار: [http://api.jquery.com/category/version/1.5/ 1.5]، وأُوقف مع الإصدار: [http://api.jquery.com/category/version/1.8/ 1.8].
 +
 
 +
==== <code>doneCallbacks</code> ====
 +
هو دالة، أو مصفوفة من الدوال، تُستدعى عند قبول الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]]‎‎.
 +
 
 +
==== <code>failCallbacks</code> ====
 +
هو دالة، أو مصفوفة من الدوال، تُستدعى عند رفض الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
 +
 
 +
=== <code>deferred.then( doneCallbacks, failCallbacks [, progressCallbacks ] )‎</code> ===
 +
أُضيف مع الإصدار: [http://api.jquery.com/category/version/1.7/ 1.7]، وأُوقف مع الإصدار: [http://api.jquery.com/category/version/1.8 1.8].
 +
 
 +
==== <code>doneCallbacks</code> ====
 +
هو دالة، أو مصفوفة من الدوال، تُستدعى عند قبول الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
 +
 
 +
==== <code>failCallbacks</code> ====
 +
هو دالة، أومصفوفة من الدوال، تُستدعى عند رفض الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
 +
 
 +
==== <code>progressCallbacks</code> ====
 +
هو دالة، أومصفوفة من الدوال، تُستدعى عند إشعار تقدُّم الكائن المؤجل وهو على الشكل [[JavaScript/Function|Function()‎‎]].
 +
 
 +
قبل jQuery 1.8، كان يمكن أن تكون الوسائط دالة أو مصفوفة من الدوال.
 +
 
 +
لجميع التوقيعات، يمكن أن تكون الوسائط <code>null</code> إذا لم تكن هناك رغبة في رد نداء من هذا النوع. بدلاً من ذلك، استخدم <code>[[jQuery/deferred/done|‎.done()]]</code>‎‎ أو <code>[[jQuery/deferred/fail|‎.fail()]]</code>‎‎ أو ‎<code>[[jQuery/deferred/progress|.progress()]]</code>‎‎ لتعيين نوع واحد فقط من رد النداء بدون ترشيح الحالة أو القيم.
 +
 
 +
اعتبارًا من jQuery 1.8، يُعيد التابع <code>deferred.then()‎‎</code> كائن promise جديدًا يمكنه ترشيح حالة وقيم الكائن المؤجل من خلال دالة، ليحل محل التابع <code>[[jQuery/deferred/pipe|deferred.pipe()‎‎]]</code> الموقوف الآن. تُرشِّح الدالتين <code>doneFilter</code> و <code>failFilter</code> حالات قبول ورفض الكائن المؤجل الأصلية وقيمه. تقوم دالة <code>progressFilter</code> بترشيح أية استدعاءات إلى تابعي <code>[[jQuery/deferred/notify|notify]]</code> و <code>[[jQuery/deferred/notifyWith|notifyWith]]</code> للكائن المؤجل الأصلي. يمكن لدوال الترشيح هذه إعادة قيمة جديدة تمرر إلى تابعي ‎<code>[[jQuery/deferred/done|.done()]]</code>‎ أو ‎<code>[[jQuery/deferred/fail|.fail()]]</code>‎‎ لدوال ردود نداء الكائن promise، أو يمكنها إعادة كائن آخر يمكن ملاحظته (Deferred و Promise ، وما إلى ذلك) والذي سيمرر حالة وقيم القبول أو الرفض إلى دوال ردود نداء الكائن promise. إذا كانت دالة الترشيح المستخدمة <code>null</code> أو غير محددة، فسيقبل promise أو يرفض بنفس قيم الأصل.
 +
 
 +
تُنفَّذ ردود النداء بالترتيب الذي أُضيفت به. ولما كان التابع <code>deferred.then</code> يعيد Promise، يمكن إعادة الكائن Promise كسلسلة (chain) من خلال التابع، بما في ذلك توابع. <code>‎.then()</code>‎‎ الإضافية.
 +
 
 +
=== أمثلة ===
 +
لما كان التابع <code>[[jQuery/jQuery.get|jQuery.get]]</code> يُعيد كائن <code>jqXHR</code>، وهي مشتقة من كائن مؤجل، يمكننا أن نلحق معالجات باستخدام التابع ‎<code>.then</code>.<syntaxhighlight lang="jquery">
 +
$.get( "test.php" ).then(
 +
  function() {
 +
    alert( "$.get succeeded" );
 +
  }, function() {
 +
    alert( "$.get failed!" );
 +
  }
 +
);
 +
</syntaxhighlight>ترشيح قيمة القبول:<syntaxhighlight lang="html">
 +
<!doctype html>
 +
<html lang="en">
 +
<head>
 +
  <meta charset="utf-8">
 +
  <title>deferred.then demo</title>
 +
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 +
</head>
 +
<body>
 +
 +
<button>Filter Resolve</button>
 +
<p></p>
 +
 +
<script>
 +
var filterResolve = function() {
 +
  var defer = $.Deferred(),
 +
    filtered = defer.then(function( value ) {
 +
      return value * 2;
 +
    });
 +
 +
  defer.resolve( 5 );
 +
  filtered.done(function( value ) {
 +
    $( "p" ).html( "Value is ( 2*5 = ) 10: " + value );
 +
  });
 +
};
 +
 +
$( "button" ).on( "click", filterResolve );
 +
</script>
 +
 +
</body>
 +
</html>
 +
</syntaxhighlight>ترشيح قيمة الرفض:<syntaxhighlight lang="jquery">
 +
var defer = $.Deferred(),
 +
  filtered = defer.then( null, function( value ) {
 +
    return value * 3;
 +
  });
 +
 +
defer.reject( 6 );
 +
filtered.fail(function( value ) {
 +
  alert( "Value is ( 3*6 = ) 18: " + value );
 +
});
 +
</syntaxhighlight>مهام مُعادة كسلسلة (chain) : البيانات المُستردّة من url2 كما هو منصوص عليه في الطلب الأول.<syntaxhighlight lang="jquery">
 +
var request = $.ajax( url, { dataType: "json" } ),
 +
  chained = request.then(function( data ) {
 +
    return $.ajax( url2, { data: { user: data.userId } } );
 +
  });
 +
 +
chained.done(function( data ) {
 +
});
 +
</syntaxhighlight>
 +
 
 +
=== مصادر ===
 +
* [http://api.jquery.com/deferred.then/ صفحة التابع ‎deferred.then()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في توثيق jQuery الرسمي].
 +
<noinclude>{{DISPLAYTITLE:التابع <code>deferred.state()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎</code>‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery}}</noinclude>
 
[[تصنيف:jQuery]]
 
[[تصنيف:jQuery]]
 
[[تصنيف:jQuery Method]]
 
[[تصنيف:jQuery Method]]
 
[[تصنيف:jQuery Deferred]]
 
[[تصنيف:jQuery Deferred]]

مراجعة 22:26، 9 مايو 2018

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎deferred.then( doneFilter [, failFilter ] [, progressFilter ] )‎

القيمة المعادة

يُعيد كائنًا من النوع Promise.

الوصف

إضافة معالجات يتم استدعاؤها عند حل الكائن المؤجل أو رفضه أو ما زال قيد التقدم.

deferred.then( doneFilter [, failFilter ] [, progressFilter ] )‎

أُضيف مع الإصدار: 1.8.

doneFilter

هو دالة تُستدعى عند قبول الكائن المؤجل وهو على الشكل Function()‎‎.

failFilter

هو دالة اختيارية تُستدعى عند رفض الكائن المؤجل وهو على الشكل Function()‎‎.

progressFilter

هو دالة إختيارية تُستدعى عند إرسال إشعارات التقدُّم للكائن المؤجل وهو على الشكل Function()‎‎.

deferred.then( doneCallbacks, failCallbacks )‎

أُضيف مع الإصدار: 1.5، وأُوقف مع الإصدار: 1.8.

doneCallbacks

هو دالة، أو مصفوفة من الدوال، تُستدعى عند قبول الكائن المؤجل وهو على الشكل Function()‎‎‎‎.

failCallbacks

هو دالة، أو مصفوفة من الدوال، تُستدعى عند رفض الكائن المؤجل وهو على الشكل Function()‎‎.

deferred.then( doneCallbacks, failCallbacks [, progressCallbacks ] )‎

أُضيف مع الإصدار: 1.7، وأُوقف مع الإصدار: 1.8.

doneCallbacks

هو دالة، أو مصفوفة من الدوال، تُستدعى عند قبول الكائن المؤجل وهو على الشكل Function()‎‎.

failCallbacks

هو دالة، أومصفوفة من الدوال، تُستدعى عند رفض الكائن المؤجل وهو على الشكل Function()‎‎.

progressCallbacks

هو دالة، أومصفوفة من الدوال، تُستدعى عند إشعار تقدُّم الكائن المؤجل وهو على الشكل Function()‎‎.

قبل jQuery 1.8، كان يمكن أن تكون الوسائط دالة أو مصفوفة من الدوال.

لجميع التوقيعات، يمكن أن تكون الوسائط null إذا لم تكن هناك رغبة في رد نداء من هذا النوع. بدلاً من ذلك، استخدم ‎.done()‎‎ أو ‎.fail()‎‎ أو ‎.progress()‎‎ لتعيين نوع واحد فقط من رد النداء بدون ترشيح الحالة أو القيم.

اعتبارًا من jQuery 1.8، يُعيد التابع deferred.then()‎‎ كائن promise جديدًا يمكنه ترشيح حالة وقيم الكائن المؤجل من خلال دالة، ليحل محل التابع deferred.pipe()‎‎ الموقوف الآن. تُرشِّح الدالتين doneFilter و failFilter حالات قبول ورفض الكائن المؤجل الأصلية وقيمه. تقوم دالة progressFilter بترشيح أية استدعاءات إلى تابعي notify و notifyWith للكائن المؤجل الأصلي. يمكن لدوال الترشيح هذه إعادة قيمة جديدة تمرر إلى تابعي ‎.done()‎ أو ‎.fail()‎‎ لدوال ردود نداء الكائن promise، أو يمكنها إعادة كائن آخر يمكن ملاحظته (Deferred و Promise ، وما إلى ذلك) والذي سيمرر حالة وقيم القبول أو الرفض إلى دوال ردود نداء الكائن promise. إذا كانت دالة الترشيح المستخدمة null أو غير محددة، فسيقبل promise أو يرفض بنفس قيم الأصل.

تُنفَّذ ردود النداء بالترتيب الذي أُضيفت به. ولما كان التابع deferred.then يعيد Promise، يمكن إعادة الكائن Promise كسلسلة (chain) من خلال التابع، بما في ذلك توابع. ‎.then()‎‎ الإضافية.

أمثلة

لما كان التابع jQuery.get يُعيد كائن jqXHR، وهي مشتقة من كائن مؤجل، يمكننا أن نلحق معالجات باستخدام التابع ‎.then.

$.get( "test.php" ).then(
  function() {
    alert( "$.get succeeded" );
  }, function() {
    alert( "$.get failed!" );
  }
);

ترشيح قيمة القبول:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>deferred.then demo</title>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
 
<button>Filter Resolve</button>
<p></p>
 
<script>
var filterResolve = function() {
  var defer = $.Deferred(),
    filtered = defer.then(function( value ) {
      return value * 2;
    });
 
  defer.resolve( 5 );
  filtered.done(function( value ) {
    $( "p" ).html( "Value is ( 2*5 = ) 10: " + value );
  });
};
 
$( "button" ).on( "click", filterResolve );
</script>
 
</body>
</html>

ترشيح قيمة الرفض:

var defer = $.Deferred(),
  filtered = defer.then( null, function( value ) {
    return value * 3;
  });
 
defer.reject( 6 );
filtered.fail(function( value ) {
  alert( "Value is ( 3*6 = ) 18: " + value );
});

مهام مُعادة كسلسلة (chain) : البيانات المُستردّة من url2 كما هو منصوص عليه في الطلب الأول.

var request = $.ajax( url, { dataType: "json" } ),
  chained = request.then(function( data ) {
    return $.ajax( url2, { data: { user: data.userId } } );
  });
 
chained.done(function( data ) {
});

مصادر

تحذير: أعرض عنوان "التابع <code>deferred.state()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎</code>‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery" تجاهل العنوان المعروض سابقا "التابع <code>deferred.then()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎</code>‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery".