Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: promise, очередь

Как реализовать собственную очередь задач и управлять приоритетами выполнения?

Этот вопрос помогает понять, как создать собственную очередь задач, что важно для управления асинхронными операциями в приложениях. Это позволяет контролировать порядок выполнения задач и управлять их приоритетами, что может быть полезно в ситуациях, когда некоторые задачи должны выполняться раньше других.

Короткий ответ

Собственная очередь задач позволяет управлять порядком выполнения асинхронных операций. Чтобы реализовать такую очередь, можно использовать массив для хранения задач и сортировать их по приоритету. При добавлении задачи в очередь указываем ее приоритет, а затем запускаем выполнение задач в порядке их приоритета, используя Promise.resolve() для асинхронного выполнения. Это позволяет эффективно управлять задачами и обеспечивать их выполнение в нужном порядке.

Длинный ответ

Реализация собственной очереди задач может быть полезна в различных сценариях, когда требуется управлять порядком выполнения асинхронных операций или их приоритетом. Например, в игровом приложении можно захотеть, чтобы важные события обрабатывались раньше, чем менее важные.

Создание очереди задач: Для создания очереди задач можно использовать массив. Каждая задача будет представлять собой объект, содержащий функцию для выполнения и приоритет.

class TaskQueue {
	constructor() {     
		this.tasks = [];    
	}    
	addTask(fn, priority = 0) {     
		this.tasks.push({ fn, priority });  // Сортируем задачи по приоритету (больший приоритет - выше в очереди)        		
		this.tasks.sort((a, b) => b.priority - a.priority);    
	}    
	async run() {    
		while (this.tasks.length > 0) {        
			const { fn } = this.tasks.shift(); // Извлекаем первую задачу            
			await fn(); // Выполняем задачу        
		}    
	} 
}

Использование очереди задач: Теперь вы можете добавлять задачи в очередь и запускать их выполнение:

const queue = new TaskQueue(); 
queue.addTask(() => new Promise(resolve => {
	setTimeout(() => {   
		console.log('Task 1 (priority 1)');        
		resolve();    
	}, 1000); 
}), 1); 
queue.addTask(() => new Promise(resolve => {
	setTimeout(() => {     
		console.log('Task 2 (priority 2)');        
		resolve();    
	}, 500); 
}), 2); 
queue.run(); // Запускаем выполнение задач

В данном примере задача с приоритетом 2 будет выполнена первой, даже если была добавлена позже.

Применение: Собственные очереди задач могут использоваться в различных приложениях, где требуется управление асинхронными операциями, например:

  • В играх для управления событиями (например, столкновение объектов).

  • В веб-приложениях для обработки запросов к API с различными уровнями важности.

  • В UI-приложениях для управления анимациями или изменениями состояния.

Таким образом, реализация очереди задач с приоритетами позволяет более гибко управлять выполнением асинхронных операций, улучшая производительность и отзывчивость приложения.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#promise

#очередь

Подпишись на React Developer в телеграм