एक स्ट्रिंग को वापस करने से पहले 4 सेकंड के लिए एक फ़ंक्शन प्रतीक्षा करने की आवश्यकता है, लेकिन कोई भाग्य नहीं है। मूल रूप से मैं यही करने की कोशिश कर रहा हूं:

function myFunction(){
 var str = '';
// DO SOMEHITNG HERE so when it's done the finally return "I'm done"

 return "I'm done";
}

मेरे पास वर्तमान में यही है (मुझे क्या याद आ रहा है), लेकिन मैं ऐसा करने के किसी अन्य तरीके के लिए भी नीचे हूं। अग्रिम में धन्यवाद!

function myFunction(){
 var counter = 0;
 var execute =  setInterval(print,  1000);

 function print(){
    document.write("Counting" + counter + "<br/>");
    ++counter;

    if(counter < 5){
        clearInterval(execute);
         str = "I'm done";
    }
 }

  return str; // Here I want to return "I'm done"
}
0
Devmix 31 अक्टूबर 2019, 14:41

3 जवाब

सबसे बढ़िया उत्तर

आप अपनी इच्छानुसार किसी फ़ंक्शन की वापसी में देरी नहीं कर सकते, लेकिन आप एक वादा वापस कर सकते हैं। ऐसी स्थितियों के लिए आपको एसिंक्रोनस फ़ंक्शन के सिम किंग का उपयोग करने की आवश्यकता है:

function myFunction() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve("I'm done");
    }, 5000)
  }
}

// Now when you use your function, you need to get the results from a then method:

let someVariable;

myFunction().then(function(output) {
  console.log(output); // I'm done
  someVariable = output;
}

console.log(someVariable); // undefined

ध्यान रखें कि एसिंक्रोनस फ़ंक्शन हमेशा एसिंक्रोनस होंगे। इसलिए अंतिम कंसोल लॉग undefined आउटपुट करेगा।

3
Elias Soares 31 अक्टूबर 2019, 12:01

आप async फ़ंक्शन का उपयोग कर सकते हैं और WindowOrWorkerGlobalScope.setTimeout()

function sleep(seconds) {
  return new Promise(result => setTimeout(result, seconds * 1000))
}

async function myFunction() {
  // DO SOMEHITNG HERE so when it's done the finally return "I'm done"
  await sleep(4) // <-- 4 seconds
  return `I'm done`
}

async function asyncCall() {
  let str = ''
  console.log('str:', str) // <-- empty here

  str = await myFunction()
  console.log('str:', str) // <-- I\'m done
}

asyncCall()
0
Yosvel Quintero Arguelles 1 नवम्बर 2019, 04:27

टिप्पणी अनुभाग में मैंने पढ़ा है कि आप AJAX का उपयोग कर रहे हैं और प्रतिक्रिया की प्रतीक्षा कर रहे हैं। तो आप मूल रूप से नीचे का उपयोग कर सकते हैं।

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
     // DO THE REQUIRED HERE AFTER RESPONSE
    }
  };
  xhttp.open("GET", "ajax_info.txt", true);
  xhttp.send();
}
0
s_u_f 31 अक्टूबर 2019, 11:48