jQuery 3.3

deferred.promise()




jquery

مؤجل. ( عودة إلى الأعلى ) [ إرجاع ] : Promise

الوصف: إرجاع كائن Promise Deferred.

يسمح الأسلوب deferred.promise() بوظيفة غير متزامنة لمنع التعليمات البرمجية الأخرى من التدخل في التقدم أو حالة الطلب الداخلي الخاص به. يعرض الوعد فقط الطرق المؤجلة اللازمة لإرفاق معالجات إضافية أو تحديد الحالة ( then ، done ، fail ، always ، pipe ، progress ، state promise ) ، ولكن ليس تلك التي تغير الحالة ( resolve ، reject ، notify ، resolveWith ، rejectWith ، notifyWith ).

إذا تم توفير target ، فسوف يقوم deferred.promise() بإرفاق الطرق عليه ثم إرجاع هذا الكائن بدلاً من إنشاء كائن جديد. قد يكون ذلك مفيدًا في إرفاق سلوك Promation بكائن موجود بالفعل.

إذا كنت تقوم بإنشاء مؤجل ، فاحتفظ بالإشارة إلى المؤجل بحيث يمكن حلها أو رفضها في مرحلة ما. إرجاع الكائن Promise فقط عبر deferred.promise() بحيث يمكن تسجيل رمز آخر callbacks أو تفقد الحالة الحالية.

لمزيد من المعلومات ، راجع وثائق كائن مؤجل .

أمثلة:

إنشاء تأجيل وتعيين وظيفتين تستند إلى المؤقت إما حل أو رفض المؤجل بعد فاصل عشوائي. أي واحد يطلق أول "wins" وسيتصل بأحد الاستدعاءات. المهلة الثانية ليس لها أي تأثير نظرًا لأن "المؤجل" قد اكتمل بالفعل (في حالة حل أو رفض) من إجراء المهلة الأول. قم أيضًا بتعيين وظيفة إخطار تقدم مستندة إلى المؤقت ، واستدعاء معالج تقدم يضيف "العمل ..." إلى نص المستند.

function asyncEvent() {
  var dfd = jQuery.Deferred();
 
  // Resolve after a random interval
  setTimeout(function() {
    dfd.resolve( "hurray" );
  }, Math.floor( 400 + Math.random() * 2000 ) );
 
  // Reject after a random interval
  setTimeout(function() {
    dfd.reject( "sorry" );
  }, Math.floor( 400 + Math.random() * 2000 ) );
 
  // Show a "working..." message every half-second
  setTimeout(function working() {
    if ( dfd.state() === "pending" ) {
      dfd.notify( "working... " );
      setTimeout( working, 500 );
    }
  }, 1 );
 
  // Return the Promise so caller can't change the Deferred
  return dfd.promise();
}
 
// Attach a done, fail, and progress handler for the asyncEvent
$.when( asyncEvent() ).then(
  function( status ) {
    alert( status + ", things are going well" );
  },
  function( status ) {
    alert( status + ", you fail this time" );
  },
  function( status ) {
    $( "body" ).append( status );
  }
);

استخدم الوسيطة المستهدفة لترويج كائن موجود إلى Promise:

// Existing object
var obj = {
    hello: function( name ) {
      alert( "Hello " + name );
    }
  },
  // Create a Deferred
  defer = $.Deferred();
 
// Set object as a promise
defer.promise( obj );
 
// Resolve the deferred
defer.resolve( "John" );
 
// Use the object as a Promise
obj.done(function( name ) {
  obj.hello( name ); // Will alert "Hello John"
}).hello( "Karl" ); // Will alert "Hello Karl"