في JavaScript ، قم بتنفيذ وظيفة عندما تكون الوظيفة الأولى جاهزة

StackOverflow https://stackoverflow.com/questions/2749903

  •  02-10-2019
  •  | 
  •  

سؤال

هل هناك أي طريقة ، في JavaScript ، للاتصال بوظيفة أخرى عندما تكون الوظيفة الأولى "جاهزة"

شيء من هذا القبيل:

ridiculousTimeConsumingFunction().onReady( newFunction() );

لتوضيح مثالي ، يمكنك إلقاء نظرة عليها:http://web.cinaird.se/pdf/test.htm

هل كانت مفيدة؟

المحلول

سخرية timeConsumingFunction () ؛ newFunction () ؛

سوف ينفذ newFunction() بعد، بعدما ridiculousTimeConsumingFunction() انتهى.

يمكنك أيضا أن تفعل شيئا مثل ridiculousTimeConsumingFunction(newFunction);, ولديها محدد على ما يلي:

function ridiculousTimeConsumingFunction(callback) {
   for (var i=0;i<1000000000;i++) {

   };

   callback();
}

التي سيكون لها نفس التأثير.

إنفاكت ، إلغاء كل ذلك ، لأنه حدث غير متزامن ، وليس وظيفة تستغرق وقتًا طويلاً ... يجب عليك استخدام رد الاتصال:

function longFunction (callback) {
  setTimeout(function(){
    $(".theDiv").css('height', 200 );
    callback();
  }, 1000);
}

ثم نسميها على النحو التالي:

longFunction(function () {
      $("#info").html(info);
});

نصائح أخرى

لا يتم تعريف مفهوم "جاهز" بشكل عام للوظائف غير المتزامنة مثل مثالك. عادة ما يتم هذا النوع من الأشياء من خلال عمليات الاسترجاعات:

function asyncFunc(callback) {
  setTimeout(function() {
    doSomething();
    callback();
  }, 1000);
}

asyncFunc(function() {alert('Done!');}

في العينة الخاصة بك ، لا تستغرق وظيفة "HorticIttimeConsumingFunction" في الواقع كل هذا الوقت المدى لتنفيذها: إنه مجدولة فقط اخر وظيفة لتشغيل 1 ثانية في المستقبل.

إذا كنت تريد أن تفعل شيئًا كهذا ، أقترح عليك التحقق من jquery uiآثار API. يتيح لك "سلسلة" الرسوم المتحركة معًا واحدة تلو الأخرى ويجب أن تحقق التأثير الذي تتبعه.

إذا كنت تقصد جاهز عندما يكون DOM جاهزًا ، لا يوجد مثل هذا الحدث ، ولكن يمكنك استخدامه jquery ready معالج لإطلاق وظيفتك عندما يصبح DOM جاهزًا.

مع JavaScript يمكنك إطلاق وظيفتك فيها load الحدث أيضا مثل هذا:

window.onload = function(){
  // your function code here
};

أو

window.onload = somefunction;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top