jQuery 3.3

deferred.then()




jquery

مؤجل. ثم (doneFilter [، failFilter] [، progressFilter]) إرجاع: Promise

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

  • الإصدار المضاف: 1.8 مؤجل. ثم (doneFilter [، failFilter] [، progressFilter])

    • doneFilter
      النوع: Function ()
      دالة تسمى عندما يتم حل "المؤجل".
    • failFilter
      النوع: Function ()
      وظيفة اختيارية يتم استدعائها عند رفض "التأجيل".
    • progressFilter
      النوع: Function ()
      وظيفة اختيارية يتم استدعائها عند إرسال إخطارات التقدم للمؤجلة.
  • الإصدار المضاف: 1.5 ، تمت إزالته: 1.8 مؤجلًا.ثم (doneCallbacks، failCallbacks)

    • doneCallbacks
      النوع: Function ()
      دالة ، أو مجموعة من الدوال ، تسمى عندما يتم حل "المؤجل".
    • failCallbacks
      النوع: Function ()
      دالة ، أو مجموعة من الوظائف ، تسمى عندما يتم رفض المؤجل.
  • الإصدار المضاف: 1.7 ، تمت إزالته: 1.8 مؤجل. ثم (doneCallbacks ، failCallbacks [، progressCallbacks])

    • doneCallbacks
      النوع: Function ()
      دالة ، أو مجموعة من الدوال ، تسمى عندما يتم حل "المؤجل".
    • failCallbacks
      النوع: Function ()
      دالة ، أو مجموعة من الوظائف ، تسمى عندما يتم رفض المؤجل.
    • progressCallbacks
      النوع: Function ()
      يتم استدعاء دالة أو مجموعة من الدالات عندما يقوم "المؤجل" بإعلام التقدم.

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

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

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

يتم تنفيذ عمليات الرد بالترتيب الذي تمت إضافته به. منذ deferred.then بإرجاع Promise ، يمكن تقييد طرق أخرى من الكائن Promise إلى هذا ، بما في ذلك أساليب. .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 );
});

مهام السلسلة:

var request = $.ajax( url, { dataType: "json" } ),
  chained = request.then(function( data ) {
    return $.ajax( url2, { data: { user: data.userId } } );
  });
 
chained.done(function( data ) {
  // data retrieved from url2 as provided by the first request
});