मैं यह पता नहीं लगा सकता..

मैं प्रत्येक कॉल के बाद देरी के साथ कई बार फ़ंक्शन निष्पादित करना चाहता हूं। यह आसानी से सेटइंटरवल का उपयोग करके हासिल किया जाता है। हालांकि, अब मैं ऐसा करने की कोशिश कर रहा हूं लेकिन मेरे सेट इंटरवल कोड में मैं एक ऐसे फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं जो एक वादा देता है। एक बार जब मैं सेट इंटरवल के अंदर कॉल कर रहा हूं, तो मैं केवल अपना अंतराल रीसेट करना चाहता हूं, जो एक वादा देता है, पूरा हो गया है। मैं यह नहीं देख सकता कि यह कैसे करें। मेरा कोड इस प्रकार है:

var repeatXTimes = config.repeatXTimes;
var sleepBetweenRepeatingAllOfTheCommandsSeconds = config.sleepBetweenRepeatingAllOfTheCommandsSeconds;
var runInfinitely = repeatXTimes == configConstants.REPEAT_INFINITE;

if (runInfinitely || repeatXTimes > 0) {

    var timesRun = 0;

    var interval = setInterval(function () {

        timesRun++;

        if (!runInfinitely && timesRun >= repeatXTimes) {       

            clearInterval(interval);
        }       

        user.runAllOfTheConfiguredCommands().then(function (respone) {

            // I only want to to set this interval to run again, once this function is complete....

        });
    }, sleepBetweenRepeatingAllOfTheCommandsSeconds * 1000););
}

कृपया कोई सलाह दे सकता है कि यह कैसे प्राप्त किया जा सकता है। मैंने खोज करने की कोशिश की है लेकिन समाधान नहीं देख सकता।

अग्रिम में धन्यवाद।

0
Yos 23 अप्रैल 2018, 17:12

1 उत्तर

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

चूंकि आपका फ़ंक्शन एक वादा लौटाता है, मेरा मानना ​​​​है कि आप इसे await कर सकते हैं (वाक्यविन्यास कॉलबैक से सरल है):

const repeatXTimes = config.repeatXTimes,
      sleepBetweenRepeatingAllOfTheCommandsSeconds = config.sleepBetweenRepeatingAllOfTheCommandsSeconds,
      runInfinitely = repeatXTimes == configConstants.REPEAT_INFINITE;

const run = async () => {
    await user.runAllOfTheConfiguredCommands()
    timesRun++
    if (runInfinitely || timesRun < repeatXTimes) setTimeout( run, sleepBetweenRepeatingAllOfTheCommandsSeconds * 1000 )
}

run()
1
Jeremy Thille 23 अप्रैल 2018, 17:51