NodeJs: Как создать случайную задержку между 1-3 секундами? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть сценарий использования, где мне нужно иметь случайную задержку от 1 до 3 секунд перед вызовом моей следующей функции.

Я пытался использовать метод setTimeout, но я неуверен, что то, что я делаю, правильно

let timeInMs = Math.random() * (3000);
console.log('timeInMs => ', timeInMs);

setTimeout(test, timeInMs);

let test = async() => {
  console.log('called')
};

Может кто-нибудь помочь с моим случаем использования?

Ответы [ 3 ]

1 голос
/ 26 октября 2019

Инкапсулируйте вашу setTimeOut функцию в Promise, затем вы можете вызвать ее с помощью синтаксиса async / await:

const randomTimeInMs = Math.random() * (3000);

const functionToExecute = (delay) => console.log(`Ended after ${delay}`)

const executeLater = (functionToExecute, delay) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(functionToExecute(delay))
        }, delay);
    });
}

// If you are in the entry file use following syntax. If you are already in an async function, just call `await executeLater()`
(async function() {
    await executeLater(functionToExecute, randomTimeInMs)
    console.log('Continue through this code after waiting...')
}());
0 голосов
/ 26 октября 2019

Вы тестовая переменная не определена, когда вызывается settimeout.

Используйте функциональный синтаксис, и это будет из-за функций scope

let timeInMs = Math.random() * (3000);
console.log('timeInMs => ', timeInMs);

setTimeout(test,timeInMs);

async function test(){
    console.log('called')
};
0 голосов
/ 26 октября 2019

Попробуйте это:

let timeInMs = Math.random() * (3000);
console.log('timeInMs => ', timeInMs);
let test = function (){
    console.log('called')
};
setTimeout(test,timeInMs);
  • Это работает правильно для меня!
  • И да! правильный способ - использование метода setTimeOut.
...