Изучение различных подходов к асинхронному сну в TypeScript

В TypeScript, как и в JavaScript, нет встроенной функции сна, позволяющей приостановить выполнение кода на заданное время. Однако есть несколько методов, которые можно использовать для достижения аналогичного эффекта. В этой статье мы рассмотрим различные подходы к реализации функций сна в TypeScript, а также приведем примеры кода для каждого метода.

Метод 1: обещание setTimeout
Один из способов реализации функции сна — создание обещания, которое разрешается после указанной задержки с помощью функции setTimeout. Вот пример:

function sleep(ms: number): Promise<void> {
  return new Promise(resolve => setTimeout(resolve, ms));
}
async function main() {
  console.log("Before sleep");
  await sleep(2000); // Sleep for 2 seconds
  console.log("After sleep");
}
main();

Метод 2: промисифицировать setTimeout
Другой подход — обернуть функцию setTimeout промисом вручную. Это позволяет использовать функцию сна более синхронно. Вот пример:

function sleep(ms: number): Promise<void> {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, ms);
  });
}
async function main() {
  console.log("Before sleep");
  await sleep(2000); // Sleep for 2 seconds
  console.log("After sleep");
}
main();

Метод 3: Async/Await с setTimeout
Вы также можете использовать синтаксис async/await непосредственно с setTimeout для достижения функциональности сна. Вот пример:

async function sleep(ms: number): Promise<void> {
  await new Promise(resolve => setTimeout(resolve, ms));
}
async function main() {
  console.log("Before sleep");
  await sleep(2000); // Sleep for 2 seconds
  console.log("After sleep");
}
main();

Метод 4: использование Node.js util.promisify
Если вы работаете в среде Node.js, вы можете использовать функцию util.promisifyдля преобразования setTimeout в функцию сна на основе обещаний. Вот пример:

import { promisify } from 'util';
const sleep = promisify(setTimeout);
async function main() {
  console.log("Before sleep");
  await sleep(2000); // Sleep for 2 seconds
  console.log("After sleep");
}
main();

В этой статье мы рассмотрели несколько методов реализации функции сна в TypeScript. Независимо от того, предпочитаете ли вы использовать Promises, async/await или использовать утилиты Node.js, вы можете добиться желаемой задержки выполнения кода. Выберите подход, который лучше всего соответствует требованиям вашего проекта и стилю кодирования. Приятного кодирования!