একের পর এক কার্যকর করতে আমি কীভাবে 3 টি ফাংশন কল করব?


151

আমার যদি এই ফাংশনগুলি একের পর এক কল করতে হয় তবে,

$('#art1').animate({'width':'1000px'},1000);        
$('#art2').animate({'width':'1000px'},1000);        
$('#art3').animate({'width':'1000px'},1000);        

আমি jQuery তে জানি আমি এর মতো কিছু করতে পারি:

$('#art1').animate({'width':'1000px'},1000,'linear',function(){
    $('#art2').animate({'width':'1000px'},1000,'linear',function(){
        $('#art3').animate({'width':'1000px'},1000);        
    });        
});        

তবে, ধরে নেওয়া যাক আমি jQuery ব্যবহার করছি না এবং আমি কল করতে চাই:

some_3secs_function(some_value);        
some_5secs_function(some_value);        
some_8secs_function(some_value);        

এক্সিকিউট করার জন্য এই ফাংশনগুলিকে আমার কীভাবে কল করা উচিত some_3secs_function, এবং সেই কলটি শেষ হওয়ার পরে, তারপরে এক্সিকিউট করুন some_5secs_functionএবং কলটি শেষ হওয়ার পরে কল করুন some_8secs_function?

হালনাগাদ:

এটি এখনও কাজ করছে না:

(function(callback){
    $('#art1').animate({'width':'1000px'},1000);
    callback();
})((function(callback2){
    $('#art2').animate({'width':'1000px'},1000);
    callback2();
})(function(){
    $('#art3').animate({'width':'1000px'},1000);
}));

তিনটি অ্যানিমেশন একই সাথে শুরু হয়

আমার ভুল কোথায়?


আপনি কি বলতে চান যে ফাংশনগুলি ঠিক 3 5 এবং 8 সেকেন্ডে ডাকা বা কেবল একের পর এক?
ট্রাস ভাসস্টন

আমি মনে করি আপনি সিঙ্ক্রোনাস বনাম অ্যাসিঙ্ক্রোনাস ফাংশন এক্সিকিউশন সম্পর্কে কেবল অনিশ্চিত। আমি আমার উত্তরটি নীচে আপডেট করেছি। আশা করি এটা সাহায্য করবে.
ওয়েইন

এই .. চেষ্টা করুন github.com/dineshkani24/queuecall
Dineshkani

উত্তর:


243

জাভাস্ক্রিপ্টে সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস রয়েছে ফাংশন রয়েছে।

সিঙ্ক্রোনাস ফাংশন

জাভাস্ক্রিপ্টে বেশিরভাগ ফাংশন সিঙ্ক্রোনাস। আপনি যদি একটি সারিতে বেশ কয়েকটি সিঙ্ক্রোনাস ফাংশন কল করতে পারেন

doSomething();
doSomethingElse();
doSomethingUsefulThisTime();

তারা ক্রমে কার্যকর করা হবে। সম্পূর্ণ doSomethingElseনা হওয়া পর্যন্ত শুরু হবে না doSomethingdoSomethingUsefulThisTimeপরিবর্তে, doSomethingElseসম্পূর্ণ না হওয়া পর্যন্ত শুরু হবে না ।

অ্যাসিঙ্ক্রোনাস ফাংশন

অ্যাসিঙ্ক্রোনাস ফাংশন, তবে একে অপরের জন্য অপেক্ষা করবে না। আসুন আমরা আমাদের উপরে যে একই কোডের নমুনাটি দেখি, এবার ধরে নিই যে ফাংশনগুলি অবিচ্ছিন্ন

doSomething();
doSomethingElse();
doSomethingUsefulThisTime();

ফাংশনগুলি ক্রমে শুরু করা হবে, তবে সেগুলি একই সময়ে মোটামুটি কার্যকর করা হবে। আপনি কোনটি প্রথমে শেষ করবেন তা ধারাবাহিকভাবে অনুমান করতে পারবেন না: সঞ্চালনের জন্য স্বল্পতম সময় গ্রহণের ক্ষেত্রে যেটি ঘটে তা প্রথমে শেষ হবে।

তবে কখনও কখনও, আপনি ক্রমগুলি কার্যকর করতে অ্যাসিনক্রোনাসযুক্ত ফাংশনগুলি চান এবং কখনও কখনও আপনি এমন ফাংশনগুলি চান যা সংশ্লেষপূর্ণভাবে অ্যাসিঙ্ক্রোনালি সম্পাদন করতে পারে to ভাগ্যক্রমে, যথাক্রমে কলব্যাক এবং সময়সীমা দ্বারা এটি সম্ভব।

Callbacks

আসুন অনুমান আমরা তিনটি অ্যাসিঙ্ক্রোনাস ফাংশন আছে যে আমরা যাতে চালানো করতে চাই, some_3secs_function, some_5secs_function, এবং some_8secs_function

যেহেতু ফাংশনগুলি জাভাস্ক্রিপ্টে আর্গুমেন্ট হিসাবে পাস করা যেতে পারে, আপনি ফাংশনটি শেষ হওয়ার পরে কার্যকর করতে একটি কলব্যাক হিসাবে একটি ফাংশন পাস করতে পারেন।

আমরা যদি এই মত ফাংশন তৈরি

function some_3secs_function(value, callback){
  //do stuff
  callback();
}

তারপরে আপনি ঠিকানায় কল করতে পারেন, এর মতো:

some_3secs_function(some_value, function() {
  some_5secs_function(other_value, function() {
    some_8secs_function(third_value, function() {
      //All three functions have completed, in order.
    });
  });
});

সময় সমাপ্ত

জাভাস্ক্রিপ্টে, আপনি একটি নির্দিষ্ট সময়সীমা (মিলি সেকেন্ডে) পরে কার্যকর করার জন্য একটি ফাংশন বলতে পারেন। এটি, কার্যত সিঙ্ক্রোনাস ফাংশনগুলি অবিচ্ছিন্নভাবে আচরণ করতে পারে।

আমাদের যদি তিনটি সিঙ্ক্রোনাস ফাংশন থাকে তবে আমরা ফাংশনটি ব্যবহার করে এটিকে সংবিধানে চালিত করতে পারি setTimeout

setTimeout(doSomething, 10);
setTimeout(doSomethingElse, 10);
setTimeout(doSomethingUsefulThisTime, 10);

এটি অবশ্য কিছুটা কুৎসিত এবং DRY নীতি [উইকিপিডিয়া] লঙ্ঘন করে । আমরা এটিকে একটি ফাংশন তৈরি করে কিছুটা পরিষ্কার করতে পারি যা ফাংশনগুলির একটি অ্যারে এবং একটি সময়সীমা গ্রহণ করে।

function executeAsynchronously(functions, timeout) {
  for(var i = 0; i < functions.length; i++) {
    setTimeout(functions[i], timeout);
  }
}

এটিকে এভাবে বলা যেতে পারে:

executeAsynchronously(
    [doSomething, doSomethingElse, doSomethingUsefulThisTime], 10);

সংক্ষেপে, আপনার যদি সিঙ্ক্রোনালি কার্যকর করতে চান এমন অ্যাসিঙ্ক্রোনাস ফাংশন থাকে, কলব্যাকগুলি ব্যবহার করুন এবং যদি আপনার সিঙ্ক্রোনাস ফাংশন থাকে যা আপনি অ্যাসিঙ্ক্রোনালি সম্পাদন করতে চান, টাইমআউটগুলি ব্যবহার করুন।


7
এটি 3,5 এবং 8 সেকেন্ডের জন্য কার্যগুলিতে বিলম্ব করবে না, উদাহরণ হিসাবে প্রস্তাবিত হিসাবে, তারা কেবল একের পর এক চলবে।
ট্রেস ভাসস্টন

1
@ পিটার - অপেক্ষা করুন, তাই আমি বিভ্রান্ত এইগুলি যদি সাধারণ সিঙ্ক্রোনাস কলগুলি হয় যা কয়েক সেকেন্ড সময় নিতে শেষ হয়, তবে আমাদের কেন এর কোনও প্রয়োজন?
ওয়েইন

9
@ পিটার - সর্বাধিক সুন্দর, সংশ্লেষিত পদ্ধতির জন্য +1 আমি তিনটি সিঙ্ক্রোনাস ফাংশনটিকে ক্রমানুসারে কল করার জন্য দেখেছি।
ওয়েইন

4
অ্যাসিঙ্ক এবং সিঙ্ক জেএস ফাংশনগুলির মধ্যে পার্থক্যটি দক্ষতার সাথে ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ। এটি এত ব্যাখ্যা করে।
জেনলসন

2
এই না নিম্নলিখিত কারণের জন্য সঠিক: (1) 3 সময় সমাপ্ত হবে 10 সেকেন্ড পরে সব সমাধান, তাই সব 3 লাইন একই সময়ে আরম্ভ। (২) এই পদ্ধতির সমাধানের জন্য শৃঙ্খলে পূর্ববর্তী অ্যাসিঙ্ক ফাংশনগুলির অপেক্ষা না করে এবং এটিই ট্রিগার হওয়ার পরিবর্তে ভবিষ্যতের আগে এবং সময়সূচী "শিডিয়ুল" ফাংশনগুলি জানতে হবে know --- পরিবর্তে আপনি কলব্যাক, প্রতিশ্রুতি বা অ্যাসিঙ্ক লাইব্রেরি ব্যবহার করে নিম্নলিখিত উত্তরগুলির মধ্যে একটি ব্যবহার করতে চান।
জিরোস্টারিস্ক

37

এই উত্তরটি ব্যবহার করে promises, মানকটির একটি জাভাস্ক্রিপ্ট বৈশিষ্ট্য ECMAScript 6। যদি আপনার টার্গেট প্ল্যাটফর্মটি সমর্থন না করে promisesতবে এটি প্রোমিসজেসের সাথে পলিফিল করুন

আমার উত্তরটি এখানে দেখুন আপনার অ্যানিমেশনগুলি ব্যবহার করতে চাইলে অন্য ফাংশন চালানো না হওয়া পর্যন্ত অ্যানিমেশন সহ কোনও ফাংশন শেষ না হওয়া পর্যন্ত অপেক্ষা করুনjQuery

এখানে আপনার কোড সহ মত দেখাবে কি ES6 Promisesএবং jQuery animations

Promise.resolve($('#art1').animate({ 'width': '1000px' }, 1000).promise()).then(function(){
    return Promise.resolve($('#art2').animate({ 'width': '1000px' }, 1000).promise());
}).then(function(){
    return Promise.resolve($('#art3').animate({ 'width': '1000px' }, 1000).promise());
});

সাধারণ পদ্ধতিগুলিও গুটিয়ে রাখা যায় Promises

new Promise(function(fulfill, reject){
    //do something for 5 seconds
    fulfill(result);
}).then(function(result){
    return new Promise(function(fulfill, reject){
        //do something for 5 seconds
        fulfill(result);
    });
}).then(function(result){
    return new Promise(function(fulfill, reject){
        //do something for 8 seconds
        fulfill(result);
    });
}).then(function(result){
    //do something with the result
});

thenপদ্ধতি শীঘ্রই হিসাবে হিসাবে কার্যকর Promiseসমাপ্ত। সাধারণত, functionপাসের রিটার্ন মান thenপরবর্তীটিকে পরবর্তী হিসাবে দেওয়া হয়।

তবে যদি কোনওটি Promiseফিরে আসে, পরবর্তী thenক্রিয়াকলাপটি Promiseশেষ হওয়া নির্বাহের আগ পর্যন্ত অপেক্ষা করে এবং এর ফলাফলগুলি (যে মানটি উত্তীর্ণ হয় fulfill) প্রাপ্ত হয়।


আমি জানি এটি দরকারী, তবে কোডটি কিছু প্রসঙ্গ দেওয়ার জন্য একটি বাস্তব বিশ্বের উদাহরণ না চেয়ে বোঝার জন্য কঠোরভাবে দেওয়া হয়েছে। আমি এই ভিডিওটি ইউটিউবে পেয়েছি: youtube.com/watch?v=y5mltEaQxa0 - এবং ভিডিওটি থেকে উত্সটি লিখেছি drive.google.com/file/d/1NrsAYs1oaxXw0kv9hz7a6LjtOEb6x7z-/… ধরা পড়ার মতো আরও কিছু সূক্ষ্মতা আছে এই উদাহরণ যে এটি বিস্তারিত। (getPostById () লাইনে আলাদা আইডি ব্যবহার করুন বা কোনও লেখকের নাম পরিবর্তন করার চেষ্টা করুন যাতে এটি কোনও পোস্টের সাথে মেলে না)
জেজিএফএমকে

20

মনে হচ্ছে আপনি সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস ফাংশন এক্সিকিউশনের মধ্যে পার্থক্যটির সম্পূর্ণ প্রশংসা করছেন না ।

আপনার আপডেটে আপনি যে কোড সরবরাহ করেছেন তা অবিলম্বে আপনার প্রতিটি কলব্যাক ফাংশন সম্পাদন করে, যার ফলে অবিলম্বে অ্যানিমেশন শুরু হয়। অ্যানিমেশনগুলি ততক্ষণে অসম্পূর্ণভাবে কার্যকর করে । এটি এর মতো কাজ করে:

  1. অ্যানিমেশন একটি পদক্ষেপ সম্পাদন করুন
  2. setTimeoutপরবর্তী অ্যানিমেশন পদক্ষেপ এবং একটি বিলম্ব সহ একটি ফাংশন সহ কল করুন
  3. কিছু সময় কেটে যায়
  4. কলব্যাক দেওয়া setTimeout, executes
  5. পদক্ষেপ 1 এ ফিরে যান

অ্যানিমেশনটির শেষ ধাপটি শেষ না হওয়া পর্যন্ত এটি চলতে থাকে। ইতিমধ্যে, আপনার সিঙ্ক্রোনাস ফাংশনগুলি অনেক আগে শেষ হয়েছে। অন্য কথায়, animateফাংশনে আপনার কলটি সত্যই 3 সেকেন্ড নেয় না । প্রভাবটি বিলম্ব এবং কলব্যাকের সাথে সিমুলেটেড হয়।

আপনার যা দরকার তা একটি সারি । অভ্যন্তরীণভাবে, jQuery অ্যানিমেশনগুলিকে সারি করে, কেবলমাত্র আপনার সম্পাদন করে কলব্যাকের সাথে সম্পর্কিত অ্যানিমেশনটি শেষ হলেই এটি । যদি আপনার কলব্যাক তারপর অন্য অ্যানিমেশন শুরু করে, তবে প্রভাবটি হ'ল তারা ক্রমানুসারে কার্যকর করা হয়।

সাধারণ ক্ষেত্রে এটি নিম্নলিখিতগুলির সমতুল্য:

window.setTimeout(function() {
    alert("!");
    // set another timeout once the first completes
    window.setTimeout(function() {
        alert("!!");
    }, 1000);
}, 3000); // longer, but first

এখানে একটি সাধারণ অ্যাসিনক্রোনাস লুপিং ফাংশন। এটি প্রতিটিটির মধ্যে নির্দিষ্ট সেকেন্ডের জন্য অপেক্ষা করে, প্রদত্ত ফাংশনগুলিকে ক্রমে কল করবে।

function loop() {
    var args = arguments;
    if (args.length <= 0)
        return;
    (function chain(i) {
        if (i >= args.length || typeof args[i] !== 'function')
            return;
        window.setTimeout(function() {
            args[i]();
            chain(i + 1);
        }, 2000);
    })(0);
}    

ব্যবহার:

loop(
  function() { alert("sam"); }, 
  function() { alert("sue"); });

আপনি অবশ্যই এটি কনফিগারযোগ্য অপেক্ষা করার সময় নিতে বা তত্ক্ষণাত্ প্রথম কার্য সম্পাদন falseকরতে বা শৃঙ্খলে applyকোনও ফাংশন নির্দিষ্ট সময় বা ফাংশনগুলিতে নির্দিষ্ট প্রসঙ্গে ফিরিয়ে দিলে বা আপনার যা প্রয়োজন হতে পারে অন্যদিকে কার্যকর করা বন্ধ করতে পারেন mod


14

আমি বিশ্বাস করি async গ্রন্থাগার আপনাকে এটি করার জন্য খুব মার্জিত উপায় সরবরাহ করবে। যদিও প্রতিশ্রুতি এবং কলব্যাকগুলি সাথে জাগ্রত করা একটু কঠিন হতে পারে তবে অ্যাসিঙ্ক আপনার চিন্তার প্রক্রিয়াটিকে সুশৃঙ্খল করার জন্য ঝরঝরে নিদর্শন দিতে পারে। সিরিয়ালে ফাংশনগুলি চালানোর জন্য আপনাকে সেগুলি একটি অ্যাসিঙ্ক জলপ্রপাতের মধ্যে রাখতে হবে । অ্যাসিঙ্ক লিঙ্গোতে প্রতিটি ফাংশনকে এমন taskকিছু বলা হয় যা কিছু যুক্তি এবং একটি গ্রহণ করে callback; যা অনুক্রমের পরবর্তী ফাংশন। প্রাথমিক কাঠামোটি দেখতে এমন কিছু হবে:

async.waterfall([
  // A list of functions
  function(callback){
      // Function no. 1 in sequence
      callback(null, arg);
  },
  function(arg, callback){
      // Function no. 2 in sequence
      callback(null);
  }
],    
function(err, results){
   // Optional final callback will get results for all prior functions
});

আমি এখানে সংক্ষেপে সংক্ষেপে ব্যাখ্যা করার চেষ্টা করেছি। আরও তথ্যের জন্য জলপ্রপাত গাইডের মাধ্যমে পড়ুন , এটি বেশ ভাল লিখেছেন।


1
এটি জেএসকে সত্যই কিছুটা বহনযোগ্য করে তোলে।
মাইক 15 ই

9

আপনার ফাংশনগুলিতে একটি কলব্যাক ফাংশন নেওয়া উচিত, এটি যখন শেষ হয় তখন কল হয়।

function fone(callback){
...do something...
callback.apply(this,[]);

}

function ftwo(callback){
...do something...
callback.apply(this,[]);
}

তাহলে ব্যবহারের মত হবে:

fone(function(){
  ftwo(function(){
   ..ftwo done...
  })
});

4
asec=1000; 

setTimeout('some_3secs_function("somevalue")',asec*3);
setTimeout('some_5secs_function("somevalue")',asec*5);
setTimeout('some_8secs_function("somevalue")',asec*8);

আমি এখানে সেটটাইমআউট সম্পর্কে গভীর আলোচনায় যাব না, তবে:

  • এই ক্ষেত্রে আমি কোডটি স্ট্রিং হিসাবে সম্পাদন করতে যুক্ত করেছি আপনার সেটটাইমআউট-এড ফাংশনে কোনও ভেরটি পাস করার এটি সহজতম উপায়, তবে পিউরিস্টরা অভিযোগ করবে।
  • আপনি উদ্ধৃতি ব্যতীত কোনও ফাংশনের নামও পাস করতে পারেন তবে কোনও ভেরিয়েবল পাস করা যায় না।
  • আপনার কোডটি ট্রিগার হওয়ার জন্য সেটটাইমআউটের জন্য অপেক্ষা করে না।
  • এটি প্রথমে আপনার মাথা পেতে শক্ত হতে পারে: পূর্ববর্তী পয়েন্টের কারণে, আপনি যদি আপনার কলিং ফাংশন থেকে কোনও ভেরিয়েবল পাস করেন, সময়সীমা শেষ হওয়ার সাথে সাথে সেই পরিবর্তনশীলটির অস্তিত্ব থাকবে না - কলিং ফাংশনটি কার্যকর হবে এবং এটিই vars চলে গেল।
  • আমি এই সমস্ত কিছু পেতে বেনাম ফাংশনগুলি ব্যবহার করতে পারি বলে পরিচিত, তবে এর থেকে আরও ভাল উপায় আর হতে পারে,

3

যেহেতু আপনি এটি জাভাস্ক্রিপ্টের সাথে ট্যাগ করেছেন, তাই আপনার ফাংশনটির নাম 3, 5 এবং 8 সেকেন্ড হওয়ায় আমি একটি টাইমার নিয়ন্ত্রণ নিয়ে যাব। সুতরাং আপনার টাইমারটি শুরু করুন, 3 সেকেন্ডের মধ্যে, প্রথম কল করুন, দ্বিতীয় কল করুন 5 সেকেন্ড, 8 seconds সেকেন্ড তৃতীয় কল করুন, তারপরে এটি শেষ হয়ে গেলে, টাইমারটি বন্ধ করুন।

সাধারণত জাভাস্ক্রিপ্টে আপনার যা সঠিক তা ফাংশনগুলির জন্য একের পর এক চলমান, তবে যেহেতু দেখে মনে হচ্ছে আপনি সময়সীমা অ্যানিমেশন করার চেষ্টা করছেন তাই টাইমার আপনার সেরা বাজি হবে।


2

//sample01
(function(_){_[0]()})([
	function(){$('#art1').animate({'width':'10px'},100,this[1].bind(this))},
	function(){$('#art2').animate({'width':'10px'},100,this[2].bind(this))},
	function(){$('#art3').animate({'width':'10px'},100)},
])

//sample02
(function(_){_.next=function(){_[++_.i].apply(_,arguments)},_[_.i=0]()})([
	function(){$('#art1').animate({'width':'10px'},100,this.next)},
	function(){$('#art2').animate({'width':'10px'},100,this.next)},
	function(){$('#art3').animate({'width':'10px'},100)},
]);

//sample03
(function(_){_.next=function(){return _[++_.i].bind(_)},_[_.i=0]()})([
	function(){$('#art1').animate({'width':'10px'},100,this.next())},
	function(){$('#art2').animate({'width':'10px'},100,this.next())},
	function(){$('#art3').animate({'width':'10px'},100)},
]);


আপনি কি দয়া করে এটি ব্যাখ্যা করতে পারেন? আন্ডারস্কোর বাঁধা কি? কার্যবিবরণীটি কী করতে nextহবে?
mtso

1
আমি jsfiddle ব্যবহার করে নমুনা 2 ব্যাখ্যা। jsfiddle.net/mzsteyuy/3 আপনি যদি আমাকে মোটামুটিভাবে ব্যাখ্যা করার অনুমতি দেন তবে নমুনা 2 হ'ল জসফিডেলের কোডের একটি ছোট উপায়। আন্ডারস্কোরটি অ্যারে হয় যা উপাদানগুলি পাল্টা মানযোগ্য (i) এবং পরবর্তী ফাংশন করে [0] ~ [2]।
yuuya

1

আপনি প্রতিশ্রুতিও এইভাবে ব্যবহার করতে পারেন:

    some_3secs_function(this.some_value).then(function(){
       some_5secs_function(this.some_other_value).then(function(){
          some_8secs_function(this.some_other_other_value);
       });
    });

some_valueএটির ভিতরে থেকে অ্যাক্সেস করার জন্য আপনাকে বিশ্বব্যাপী করতে হবে then

বিকল্পভাবে, বাহ্যিক ক্রিয়াকলাপ থেকে আপনি অভ্যন্তরীণ ফাংশনটি যে মানটি ব্যবহার করতে চান তা ফিরিয়ে দিতে পারেন:

    one(some_value).then(function(return_of_one){
       two(return_of_one).then(function(return_of_two){
          three(return_of_two);
       });
    });

0

আমি জাভাস্ক্রিপ্টের সেটটাইমআউটের উপর ভিত্তি করে একটি 'ওয়েটআন্টিল' ফাংশন ব্যবহার করি

/*
    funcCond : function to call to check whether a condition is true
    readyAction : function to call when the condition was true
    checkInterval : interval to poll <optional>
    timeout : timeout until the setTimeout should stop polling (not 100% accurate. It was accurate enough for my code, but if you need exact milliseconds, please refrain from using Date <optional>
    timeoutfunc : function to call on timeout <optional>
*/
function waitUntil(funcCond, readyAction, checkInterval, timeout, timeoutfunc) {
    if (checkInterval == null) {
        checkInterval = 100; // checkinterval of 100ms by default
    }
    var start = +new Date(); // use the + to convert it to a number immediatly
    if (timeout == null) {
        timeout = Number.POSITIVE_INFINITY; // no timeout by default
    }
    var checkFunc = function() {
        var end = +new Date(); // rough timeout estimations by default

        if (end-start > timeout) {
            if (timeoutfunc){ // if timeout function was defined
                timeoutfunc(); // call timeout function
            }
        } else {
            if(funcCond()) { // if condition was met
                readyAction(); // perform ready action function
            } else {
                setTimeout(checkFunc, checkInterval); // else re-iterate
            }
        }
    };
    checkFunc(); // start check function initially
};

এটি কার্যকরভাবে কাজ করবে যদি আপনার ফাংশনগুলি একটি নির্দিষ্ট শর্তটি সত্য করে দেয় যা আপনি পোল করতে সক্ষম হবেন। এছাড়াও এটি টাইমআউটগুলির সাথে আসে, যা আপনার ফাংশনটি কিছু করতে ব্যর্থ হলে (বিকল্প সময়সীমার মধ্যেও user ব্যবহারকারীর প্রতিক্রিয়া সম্পর্কে চিন্তা করুন!) বিকল্প প্রস্তাব দেয়)

যেমন

doSomething();
waitUntil(function() { return doSomething_value===1;}, doSomethingElse);
waitUntil(function() { return doSomethingElse_value===1;}, doSomethingUseful);

মন্তব্য

তারিখ মোটামুটি সময়সীমা অনুমান কারণ। বৃহত্তর নির্ভুলতার জন্য, কনসোল.টাইম () এর মতো ফাংশনে স্যুইচ করুন। মনে রাখবেন যে তারিখটি বৃহত্তর ক্রস-ব্রাউজার এবং উত্তরাধিকার সমর্থন সরবরাহ করে। আপনার যদি সঠিক মিলিসেকেন্ড পরিমাপের প্রয়োজন না হয়; বিরক্ত করবেন না, অথবা, বিকল্পভাবে, এটি মোড়ানো, এবং ব্রাউজার সমর্থন করে যখন কনসোল.টাইম () অফার


0

পদ্ধতি 2, 3, 4 পরে যদি পদ্ধতি 1 প্রয়োগ করতে হয় তবে নিম্নলিখিত কোড স্নিপেট জাভাস্ক্রিপ্টে ডিফার্ড অবজেক্ট ব্যবহার করে এর সমাধান হতে পারে।

function method1(){
  var dfd = new $.Deferred();
     setTimeout(function(){
     console.log("Inside Method - 1"); 
     method2(dfd);	 
    }, 5000);
  return dfd.promise();
}

function method2(dfd){
  setTimeout(function(){
   console.log("Inside Method - 2"); 
   method3(dfd);	
  }, 3000);
}

function method3(dfd){
  setTimeout(function(){
   console.log("Inside Method - 3"); 	
   dfd.resolve();
  }, 3000);
}

function method4(){   
   console.log("Inside Method - 4"); 	
}

var call = method1();

$.when(call).then(function(cb){
  method4();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.