Информация о статусе сервера обновлена только что.
Проверить снова
Что делать, если сайт недоступен?
Sigame.ru не работает сегодня февраль 2023?
Узнайте, работает ли Sigame.ru в нормальном режиме или есть проблемы сегодня
Статус Sigame.ru : нет сбоя
0 комментариев
Sigame.ru сбои за последние 24 часа
Не работает Sigame.ru?
Не открывается, не грузится, не доступен, лежит или глючит?
Самые частые проблемы Sigame.ru
Не определены.
Что делать, если сайт SIGAME.RU недоступен?
Если SIGAME.RU работает, однако вы не можете получить доступ к сайту или отдельной его странице, попробуйте одно из возможных решений:
Кэш браузера.
Чтобы удалить кэш и получить актуальную версию страницы, обновите в браузере страницу с помощью комбинации клавиш Ctrl + F5.
Блокировка доступа к сайту.
Очистите файлы cookie браузера и смените IP-адрес компьютера.
Антивирус и файрвол.
Проверьте, чтобы антивирусные программы (McAfee, Kaspersky Antivirus или аналог) или файрвол, установленные на ваш компьютер — не блокировали доступ к SIGAME.RU.
DNS-кэш.
Очистите DNS-кэш на вашем компьютере и повторите попытку доступа на сайт.
Смотреть видео-инструкцию ↓
VPN и альтернативные службы DNS.
VPN: например, мы рекомендуем NordVPN.
Альтернативные DNS: OpenDNS или Google Public DNS.
Плагины браузера.
Например, расширение AdBlock вместе с рекламой может блокировать содержимое сайта. Найдите и отключите похожие плагины для исследуемого вами сайта.
Сбой драйвера микрофона
Быстро проверить микрофон: Тест Микрофона.
Форум Sigame.ru
Подсказки? Разочарования? Обсуждаем проблемы сервиса с другими посетителями сайта:
Чат с регистрацией
идентификация не требуется
комментарии с нецензурной лексикой и оскорблениями удаляются
Содержание
- «Своя Игра»: что такое и как ее есть
- SetupComp
- Игра не запускается на Windows 7 (сборник решений)
- 1. Не выставлен режим совместимости старых игр.
- 2. Отсутствует актуальная версия DirectX
- 4. Не установлен патч для игры.
- 5. Пиратская cборка Windows 7.
- 8. Отсутствует PhysX.
- 10. После непродолжительной игры около 15 минут начинается дёрганье и проблемы с изображением.
- 11. Купил лицензионную игру, но она не хочет запускаться.
- 12. При запуске игры Gears of War выдаёт binkw32.dll: You cannot run this game with modified executable code. Please reinstall the game.
- 13. Игра не запускается, компьютер медленно работает.
- 14. При запуске игр процессор грузится на 80-90% в результате компьютер, в диспетчере устройств висит процесс rundll32.exe который в свою очередь вызван gameux.dll
«Своя Игра»: что такое и как ее есть
«Своя игра» — передача с НТВ, которая обрела вторую жизнь в Интернете благодаря программисту-энтузиасту Владимиру Хилю. Он перенес телевизионную забаву на компьютеры в виде игры-приложения, которая не только не теряет актуальности, но и становится популярнее с каждым днем.
Возможно, вы про игру слышали. Возможно, вы видели по ней стримы. Возможно, ТЕОРЕТИЧЕСКИ, вы видели по ней стримы паблика ЦиО:
И у вас, ВОЗМОЖНО, появились следующие вопросы:
А где игру взять?
А как в нее играть?
А где брать пакеты для игры?
А как делать пакеты самому?
На все вопросы я постараюсь ответить в этом блоге. Также весь рассказ я решил поделить на 2 части: для игроков и для людей, которые хотят создавать свои пакеты вопросов, а не баловаться чужими (хотя можно реализовывать оба (ОБОИ) варианта).
Итак, вы решили поиграть в «Свояк». Что вам нужно знать?
SIGame можно скачать с официального сайта разработчика. Там же можно стянуть редактор пакетов с вопросами, но о нем позже. Сайт максимально прост в понимании и поиске нужной информации, поэтому если вы не комментатор с ютуба — найдете за пару секунд.
Правила «Своей Игры» достаточно просты. Перед вами есть табло из тем. Музыка, фильмы, игры, картины, спорт, книги — это может быть что угодно (даже аниме!). В каждой категории есть несколько вопросов, которые, обычно, отличаются ценой. Ну вы знаете, вот эти вот «Юмор за 200», «фильмы за 400», эта штука пошла именно из «Свояка».
От цены зависит сложность вопроса. Чем больше стоимость — тем труднее будет задачка.
Когда первый игрок выбирает вопрос, все участники игры (кроме, разумеется, ведущего), могут после зачитывания оного нажать на специальную кнопку, тем самым показывая желание ответить на вопрос.
красным выделены зоны, на которые можно нажать ЛКМ, чтобы ответить на вопрос
Но обычно люди назначают себе специальную клавишу, которую они будут жать прямо как настоящую кнопку в настоящем телешоу. Обычно все делают это на пробел, но тут кому как удобнее. Можете хоть на F13 забить, если вам так нравится. Выбрать кнопку можно в настройках, что хитро спрятались в нижнем левом углу экрана (указаны фиолетовой стрелочкой для людей, не вкачивающих Восприятие).
Да, кстати, пока вы не вышли из настроек. Дружеский совет: зайдите во вкладку «Приложение» и снимите галочку с пункта «Звук». Это выключит все внутри игровые звуки, музыкальные и видео вопросы вы будете слышать вне зависимости от настроек.
Вернемся к правилам. Если вы нажали кнопку ответа и дали правильный ответ — вы получаете указанную сумму очков. Если вы сделали то же самое, но НЕ ответили на вопрос — вы ее теряете. Не нажали кнопку вообще? Значит, с вашим внутриигровым балансом ничего не произошло. Вы просто остались в стороне.
Помимо обычных вопросов есть небольшие сюрпризы:
1. Кот в мешке обычный
Вопрос, который обязательно нужно отдать. Его тема может отличаться от указанной категории. Скажем, вы выбрали вопрос «Книги за 300», а там кот в мешке на тему поэзии, стоймость 500. Абсолютно нормальная ситуация.
2. Кот в мешке обобщенный
То же самое, только этого кота вы можете как отдать, так и оставить себе. ВАЖНО: только обобщенному коту в мешке можно прописать функцию «показать тему кота ДО выдачи этого самого кота кому-то из игроков». Я для честности игры обычно всегда выбираю его и прописываю эту функцию, чтобы кот не был уж совсем случайным наобумом.
На этот вопрос ответит не тот, кто раньше нажмет на кнопку, а тот, кто предложит за него больше очков. Участники по очереди ставят свои кровные, стараясь перебить ставку предыдущего. А еще можно уйти в ВА-БАНК. Тогда все следующие игроки тоже должны будут идти в ва-банк. Или пасовать, отдавая вопрос победителю.
И да, если вы выиграли торги за вопрос — вам придется на него отвечать. И свою ставку вы можете еще и потерять, дав неверный ответ.
4. Вопрос от спонсора
Если вы попали на этот пункт — вы везунчик. Вопрос только для вас, в случае неудачи очков вы не теряете, а при правильном ответе вы получаете удвоенную награду. Халява!
Так же у игры есть финал. Обычно это несколько вопросов, каждый принадлежит разной теме. Игроки по очереди убирают пункт за пунктом, пока не останется одна тема, на которую все участники и будут отвечать. Цена вопроса — то, что сами игроки отважатся поставить. И, как обычно, если ответ неправильный, то они указанную сумму теряют.
Кстати, если вы не согласны с решением ведущего касательно ответа на последний вопрос, справа снизу вы можете нажать кнопку «оспорить» и начать голосование. Если большинство проголосует за то, что ведущий ведет откровенный произвол, баллы вернутся на место. Но обычно эта функция нужна только для игр с рандомами — друзей всегда можно послать к черту через войс-чат или при личной встрече.
КАК ИГРАТЬ ВЕДУЩЕМУ
Ну какая игра без человека, что своим властвующим перстом будет указывать плебеям на их ошибки и вознаграждать мудрецов за их острый ум незримыми очками? Геймплей за ведущего очень прост и нужен для тех людей, что хотят зависнуть в «Свояк» с пацанами, но при этом не хотят думать. Ну и для авторов пакетов, конечно.
У них все просто — сравнивай ответ игрока с правильным и давайотнимай у него очки. Так же ведущий может определять игрока, что в начале игры первым будет выбирать вопрос и сниматьдавать очки на свое усмотрение с помощью панели в правом нижнем углу.
Ой-ой-ой, чуть не забыл. Мистер ведущий, не забудь в настройках подкрутить время, отведенное на действия игроков: длина раунда, время на дачу ответа и т.д. Настраивайте, как вам удобно, лишь скажу что время раунда стоит выкрутить на максимум, если хотите сыграть все вопросы. Я настроил вот так:
Через настройки помимо времени можно настроить фальстарты и прочие полезные вещи. Потратье минутку и побродите там, чтобы настроить все необходимое под себя. И да, когда создаете сервер с пакетом — НЕ СТАВЬТЕ ГАЛОЧКУ НА СЛУЧАЙНЫЕ СПЕЦ-ВОПРОСЫ. Если вы ее поставите, игра по своему велению превратит вопросы в вашем пакете в случайных котов в мешке, аукционы и прочее.
ГДЕ ВЗЯТЬ ПАКЕТЫ ВОПРОСОВ
Их можно найти на все том же официальном сайте SIGame в галерее, а так же в официальном паблике ВК. Помимо этого есть куча групп и сообществ, посвященных «Свояку», которые так же собираютпроизводят свои пакеты.
В целом, это вся основная информация, что вам нужна. И если вас напугала эта стена текста — не пугайтесь, на самом деле в «Свояке» все интуитивно понятно и разобраться во всех сложностях можно чуть ли не на ощупь.
И да, не забудьте настроить игровой профиль! Модный ник, стильная аватарка — ну куда же без этого?
Вот тут можно все настроить. К слову, ваша аватарка должна быть на компьютере. Игра ее не сохраняет, поэтому удалили картинку — вместо аватарки пустое место.
ДЛЯ ТЕХ, КТО ХОЧЕТ СОЗДАВАТЬ СВОИ ПАКЕТЫ ВОПРОСОВ
И вот вы оглянуться не успели, как у вас за плечами уже около пары десятков отыгранных пакетов. За это время вы наелись любительским контентом по самые уши: одни и те же вопросы (УГАДАЙТЕ, КОМУ ПРИНАДЛЕЖИТ ЦИТАТА «ЧТО ТАКОЕ БЕЗУМИЕ» — этот вопрос всем любителям геймерских паков встречается чуть ли не каждую вторую игру), идиотские загадки, ошибки по фактике… В общем, дерьмо случается.
Насмотревшись на этот цирк, вы решаете сделать СВОЙ, КРУТОЙ, КЛАССНЫЙ ПАКЕТ С ВОПРОСАМИ. Скажем, вы киноман? Тогда вы ЩЩЩАС покажете всем этим дилетантам, что такое ВОПРОСЫ ПРО КИНО, а не банальные «угадай Охотников за Привидениями по их музыкальной теме». Ну что же, вперед!
1. Качаем редактор пакетов.
Берется на все том же сайте, где и сам «Свояк». Где именно — НЕ СКАЖУ. Считайте это проверкой на IQ — если вы не в состоянии найти синенькую ссылочку на сайте в 1 страничку, то вам не стоит заниматься пакетами вопросов.
Ладно, это было комедийное отступление. Просто 1 пункт был слишком маленький, и я решил разбавить его водой. КАКОВ ХИТРЕЦ.
2. Открываем редактор.
Мы запускаем SIQester и видим примерно такую картину:
В центре вам предложат открыть старые пакеты вопросов (если вы уже занимались какими-либо пакетами), а слева вверху (я даже красной стрелочкой указал где) можно как открыть файл со своего диска, так и создать новый. Создаем новый.
Настройки отличаются количеством раундов, категорий и вопросов в этих самых категориях, а также наличиемотсутствием финального раунда. В целом, берите любой вариант — в процессе создания пакета любой элемент игры можно спокойно удалятьсоздавать, так что если вы выберете стандартный формат из 3 раундов, никто не запретит вам добавить, скажем, еще 12.
И ВСЕ ПРО АНИМЕ, АХАХАХАХАХХАХА извините
3. Начинаем творить!
Вот как-то так будет выглядеть рабочее пространство. Ваш пакет — это такое дерево, где все идет по убывающей. Сначала раунды, которые раскрываются на категории. Потом категории разворачиваются на вопросы, а внутри них вы настриваете содержание. По порядку варианты вопросов: текстовый, картинка, музыка, еще картика, кот в мешке. В скобочках вы пишите ответ, который будет отображаться ведущему как правильный (через пкм можно настроить дополнительные ответы и неправильные варианты). Цифры слева — цена вопроса, ее тоже можно регулировать.
Еще можно вставить видео, но тут (как и со всеми медиа-файлами в пакете) надо помнить одну вещь — размер файла. Старайтесь по возможности не всовывать в пакет вещи весом больше мегабайта-двух, так как игра не всегда успевает шустро прогружать большие файлы. Особенно, если игроки с медленным интернетом или подключаются где-нибудь из Зимбабве.
Настраивать содержимое вопроса можно, выбрав его ЛКМ. После этого появляется данная менюшка с очень понятным и гибким редактором. Я даже его расписывать толком не буду — там все максимально просто. Единственные 2 вещи:
1. С помощью зеленого плюса можно добавлять пункты к вопросу. Они будут воспроизводиться сверху-вниз по порядку. Менять пункты можно синей стрелкой.
2.Иногда, при редактировании обобщенного кота в мешке, некоторые функции этого кота пропадают еще на этапе создания пакетов. Это глюк, появляющийся в дополнительных раундахкатегориях (дополнительные = те, которые вы добавили сверх обычных 3 раундов5 категорий). Просто создайте кота в первых 3 раундахкатегориях и перетащите готового мышкой вниз. Или пересоздайте.
Главное без паники, ошибки случаются, так что перед серьезным стримом или еще каким паказом своего крутого пакета обязательно протестируйте его на вшивость с друзьями.
Дальше вы разберетесь сами. Только не забывайте сохранять свой труд — а то вдруг что потеряется.
1. Старайтесь писать условия категорийвопросов максимально понятно. Тестируйте формулировки на играх с друзьями. Если они не поняли вопрос — возможно, вы его коряво написали.
Пример: категория называется «Музыкальные вопросы». Играет OST Ведьмака. Ваш друг Вован жмет кнопку и кричит «ВЕДЬМАК». А вы не засчитываете, ведь надо было назвать точную часть! Но откуда это знать Вовану? Чтобы конфуза не было, пишите в условиях «назовите ТОЧНОЕ название игры» или еще как-то уточните этот момент. Ну или словами скажите «Вован, назови часть, а то не засчитаю».
2. Все файлы для пакета складывайте в одну папку. В случае редактирования пакета у вас будет место, где взять файлы заново. А когда закончите — все лишнее можно удалить одним кликом.
В случае, если исходники вы уже удалили, а файл внутри пакета вам нужен, его можно выгрузить из пакета через все тот же SIQuester. Только потом спасенный файл нужно конвертировать через какую-нибудь программу (например, фотошоп или Sony Vegas).
3. Делайте пакет грамотно. Не спешите, посидите над ним пару дней, перепроверьте. Не гнушайтесь обрезать картинки и звук. Очень плохо качать музыку для вопроса из ВК и засовывать все ее 3 минуты 12 секунд (или сколько там будет) в игру, заставляя игроков все 3 минуты 12 секунд сидеть и слушать. Обрежьте ее до нужных 20 секунд через программы. Урежьте большие картинки до 720p, чтобы они быстро грузились и так далее.
4. Не будьте банальным. Прежде чем делать свой пакет, посмотрите или поиграйте чужие на ту же тему, на которую вы хотите делать, чтобы не повторять одни и те же популярные вопросы. Главная тема The Witcher 3, музыка из меню Divinity Original Sin, главная тема «Хороший, Плохой, Злой», скриншоты Bioshock — поверьте, все эти вещи и им подобные есть в десятках, если не в сотнях пакетов. Будьте оригинальным — вставьте какую-то другую песню из «Ведьмака» или добавьте такой скриншот из популярной игры, по которому она не сразу угадывается.
5. Держите баланс сложности. Оставьте простейшие вопросы на первый раунд, а сложную дичь — на последний. То же самое с дешевымидорогими вопросами. Старайтесь идти по нарастающей, а не «Вопрос за 100 — как звали третьего по счету статиста в сцене, где Арагорн ведет свое войско в последнем фильме по Властелину Колец?». Пожалейте тех, кто будет играть в ваш пакет.
В целом, если вы все это прочитали и не померли от скукинепонимания, то считайте что вы на 99% знаток «Своей Игры» и всех ее подводных камней. Остается только либо играть, либо творить! Удачи!
Источник
SetupComp
Игра не запускается на Windows 7 (сборник решений)
Игра не запускается на Windows 7, даже имея мощный компьютер с хорошим процессором и производительной видеокартой можно столкнуться с этой проблемой. Частые ошибки или просто синий экран могут доставить много огорчений любому пользователю. Причины, по которым возникают ошибки, могут быть самыми разнообразными и универсальных средств для их решения не существует. Очень важно запомнить или даже записать сообщения, которое появляется после неудачного запуска игры или ее завершения. Это поможет вам с большой вероятностью установить причину некорректной работы приложения и попытаться исправить ее самому, не прибегая к услугам специалистов.
Не большой совет.
Как нам известно, что сейчас выпускают весьма очень скоростные компьютеры, на которых бы нам хотелось не только играть, но и работать.
Тогда Вам придется поставить две операционные системы. Первая Операционная система будет исключительно для игр, a вот второй WIndows уже тот, что вам удобен для работы. Обязательно устанавливать их на разные диски! И тогда при включении компьютера он у вас будет запрашивать, какой WIndows запустить.
В этой статье собрали наиболее встречающиеся ошибки, когда игра не запускается на Windows 7.
1. Не выставлен режим совместимости старых игр.
1.1). Использование мастера запуска исправления неполадок совместимости.
В этом случае достаточно щелкнуть правой кнопкой мыши на ярлыке и выбрать пункт «Исправление неполадок совместимости».
После работы мастера, семерка предложит вам запустить программу с автоматически установленными параметрами. К сожалению, этот способ не всегда решает проблемы запуска программ или игр.
1.2). Ручная настройка параметров запуска программы в режиме совместимости.
Для ручной настройки, следуйте инструкции:
1. Щелкнуть правой кнопкой мыши на ярлыке и выбрать «Свойства». В открывшемся окне переключитесь на закладку «Совместимость».
2. Поставьте галку в пункте «Запуск программы в режиме совместимости с:» и в выпадающем списке выберите последнюю версию виндоус с которой должна нормально работать запускаемая программа или игра. Обратите внимание, что если вы пытаетесь настроить совместимость для пакета формата MSI, то выбора программ не будет, мы сможете только включить режим, а подходящую версию ОС, Windows 7 выберет самостоятельно.
2. Отсутствует актуальная версия DirectX
Требуется зайти на официальный сайт Microsoft по ссылке и скачать установщик DirectX dxwebsetup.exe.
Установщик проверит версию DirectX на Вашем компьютере и если потребуется, скачает и установит DirectX полностью или недостающие компоненты.
Заходим на официальный сайт Microsoft и скачиваем последнюю версию .NET Framework
После запуска приложения, соглашаемся с лицензионными условиями и устанавливаем программу.
4. Не установлен патч для игры.
С момента выхода игры, разработчики могут выпустить обновления, которое исправляет ряд ошибок в самой игре. Поэтому рекомендуем проверить наличие патчей для игры, которая не запускается.
Проверить наличие патчей можно на официальной странице самой игры или воспользоваться русскоязычным сервисом.
Заходим на крупный игровой портал ag.ru и вводим в строке поиска название игры, к примеру Might & Magic Heroes V.
И смотрим наличие патчей к нашей игре, если он есть скачиваем и устанавливаем.
5. Пиратская cборка Windows 7.
Игры не запускаются на Windows 7 в случае если сама операционная система установлена не с оригинального диска, а с распространенных в Интернете пиратских сборок. Эти сборки могут не содержать всех необходимых файлов для нормального функционирования Windows 7.
Файл находится библиотеке Visual Basic 5.0 Run-time. Нужно его найти в Интернете, скачать и скопировать в системный каталог операционной системы.
С официального сайта msvbvm50.dll или msvbvm50.dll
В зависимости от требований игры может недоставать следующих файлы d3dx9_25.dll или (d3dx9_**.dll – где ** номер библиотеки, он может быть таким d3dx9_26.dll, d3dx9_27.dll, d3dx9_28.dll и т.д.
Требуется обновить DirectX (пункт второй)
8. Отсутствует PhysX.
Некоторые игры для прорисовки ряда физических явлений используют PhysX. К таким играм, к примеру, относятся: Mass Effect, Batman: Arkham City, Gothic 3, Mafia II, Metro 2033, Tom Clancy’s, Warfare и многие другие.
Заходим на официальный сайт NVIDIA в строку поиска пишем PhysX и нажимаем клавишу “Enter”
Первая строка – описание технологии PhysX и демонстрация ее на видео и картинках. Нам нужна вторая строка, где можно скачать саму программу.
Запуск игры нужно попробовать выполнить от имени администратора или отключить UAC.
Правой клавишей мышки щелкаем по значку игры и в выпадающем меню выбираем – «Запуск от имени администратора»
Если не помогает, пробуем отключить UAC
Пуск –> Панель управления –> Учетные записи пользователей –>
Выбираем «Изменение параметров контроля учетных записей (UAC)»
Ставим ползунок на самый низ и перезагружаем компьютер.
10. После непродолжительной игры около 15 минут начинается дёрганье и проблемы с изображением.
Там же можно скачать версию для установки (инсталляции) на 32-х и 64-битные системы с FTP или HTTP
Запускается программа с .ехе файла (в Win7 от имени администратора) после разархивировании архива или с ярлыка на рабочем столе после инсталяции.
в случае превышения показателей сделать профилактику.
11. Купил лицензионную игру, но она не хочет запускаться.
Проверьте место расположения игры, в пути к игре не должны содержаться русские буквы.
Переустановите игру в другую папку (простое переименование папки не даст результатов).
12. При запуске игры Gears of War выдаёт binkw32.dll: You cannot run this game with modified executable code. Please reinstall the game.
Этот файл подписан сертификатом Epic Games Inc, который действителен с 07.01.2006 по 29.01.2009.
Нужно переставить дату на компьютере, например, 01.10.2007 г.
13. Игра не запускается, компьютер медленно работает.
Возможно компьютер заражен вирусом, нужно проверить ПК на вирусы.
14. При запуске игр процессор грузится на 80-90% в результате компьютер, в диспетчере устройств висит процесс rundll32.exe который в свою очередь вызван gameux.dll
В Windows 7 реализован механизм записи информации о играх. В результате ошибки, записи могут быть повреждены и поэтому нужно скачать оригинальный файл GameUXLegacyGDFs.dll и попробовать заменить их в системе (в Windows 7 их минимум 2 шт).
Или вручную удалить записи с файла GameUXLegacyGDFs.dll, если после этого все-таки игра не запускается на Windows 7.
14.1) В строке команд набираем «Regedit» и запускаем программу редактор реестра.
14.2) Удаляем указанный раздел со всем его содержимым
14.3) Переходим в папку Windows C:WindowsSystem32 находим файл GameUXLegacyGDFs.dll и копируем его в другую папку, например на диск D: Temp
ВАЖНО: (сохраняем еще файл GameUXLegacyGDFs.dll в другую папку на случай, если сделаем что-то не правильно.)
14.4) Открываем скопированный файл GameUXLegacyGDFs.dll в любом PE-редакторе (к примеру, Restorator )
Скачиваем с оф. сайта Restorator и устанавливаем программу.
14.5) Удаляем секцию DATA (здесь хранится информация о старых играх)
сохраняем файл GameUXLegacyGDFs.dll
14.6) Перезагружаем компьютер в безопасном режиме
14.7) Открываем папку C:Windows и ищем файл GameUXLegacyGDFs.dll:
C:WindowsSystem32GameUXLegacyGDFs.dll
C:Windowswinsxsamd64_microsoft-windows-gameexplorer_31bf3856ad364e35_6.1.7601.17514_none_a026547dd7dc8bbcGameUXLegacyGDFs.dll и т.д.
и видим, что основной владелец TrustedInstaller, а права Администратора ограничены.
Добавляем себе права. (ставим галочку «Полный доступ»)
14.9) Заменяем оригинальный GameUXLegacyGDFs.dll на свой с удаленными ресурсами.
14.10) Перезагружаем компьютер.
Рассмотрели наиболее встречающиеся ошибки, когда игры не запускаются на Windows 7. Надеюсь, этот материал поможет вам решить проблему с запуском игр на компьютере.
Ещё по теме
Источник
Exceptions, whether sync or async, go up the stack until there is a try..catch
to handle them. If there is no handler on any level, they become uncaught exceptions. Browsers and NodeJs both show them prominently on the console with an Uncaught Error: <msg>
or a (node:29493) UnhandledPromiseRejectionWarning: Error: <msg>
.
Besides their visibility, in some cases it’s sensible to restart an app when there is an uncaught error. It is a best practice to handle all errors in the code and not allow any to bubble up too much.
While uncaught errors work the same in sync and async functions, I’ve found that it’s easier to have an uncaught exception with async functions than with synchronous ones.
In this article, you’ll learn about a few cases where async exceptions bubble up and become uncaught errors. You’ll learn why they happen and what to do with them.
Async IIFE
For example, let’s see the simplest async function, an async IIFE:
(async () => {
throw new Error("err"); // uncaught
})();
First, let’s see how a synchronous function works with a try..catch
block:
try {
(() => {
throw new Error("err");
})();
}catch(e) {
console.log(e); // caught
}
The console shows the error is handled by the catch block:
Let’s change it to an async function:
try {
(async () => {
throw new Error("err"); // uncaught
})();
}catch(e) {
console.log(e)
}
The catch won’t run in this case:
Uncaught (in promise) Error: err
Why is that?
In the synchronous case, the error was a sync error, so the sync try..catch
could handle it. More simplified, the program execution never left the try..catch
block, so any errors were handled by it.
But an async function works differently. The only sync operation there creates a new Promise and the body of the function runs later. The program leaves the try..catch
by the time the error is thrown so it won’t be able to handle it.
With this background information, the solution is straightforward. Since the async function creates a Promise, use its .catch
function to handle any errors in it:
(async () => {
throw new Error("err");
})().catch((e) => {
console.log(e); // caught
});
Or add a try..catch
inside the async function:
(async () => {
try {
throw new Error("err");
}catch(e) {
console.log(e); // caught
}
})();
Async forEach
Another place where async makes a significant difference on how errors are handled is the async forEach
.
Errors in a sync forEach
are handled by the try..catch
:
try{
[1,2,3].forEach(() => {
throw new Error("err");
});
}catch(e) {
console.log(e); // caught
}
But the simple change of making the iteratee async changes how errors are propagated:
try{
[1,2,3].forEach(async () => {
throw new Error("err");
});
}catch(e) {
console.log(e)
}
This throws 3 uncaught exceptions:
Uncaught (in promise) Error: err
Uncaught (in promise) Error: err
Uncaught (in promise) Error: err
Using async functions with a forEach
is usually a bad idea. Instead, use an async map and await Promise.all
:
try{
await Promise.all([1,2,3].map(async () => {
throw new Error("err");
}));
}catch(e) {
console.log(e); // caught
}
This way, errors are handled similar to the sync version.
Related
How to iterate over the elements asynchronously
Promise chaining
Async functions rely on Promises to perform async operations. Because of this, you can use the .then(onSuccess, onError)
callback with async functions also.
A common error is to attach the two handlers in one .then
call:
Promise.resolve().then(/*onSuccess*/() => {
throw new Error("err"); // uncaught
}, /*onError*/(e) => {
console.log(e)
});
The problem here is that errors thrown in the onSuccess
function are not handled by the onError
in the same .then
. The solution is to add a .catch
(equals to .then(undefined, fn)
) after:
Promise.resolve().then(/*onSuccess*/() => {
throw new Error("err");
}).catch(/*onError*/(e) => {
console.log(e); // caught
})
Related
How to use the promisify and callbackify functions, and when they are not enough
Early init
Another rather common source of uncaught exceptions is to run things in parallel by separating the Promise from the await
. Since only the await
stops the async function, this structure achieves parallelization.
In this example, p1
starts, then the async function continues to the next line immediately. It starts the second wait
, then stops. When the second Promise is settled, it moves on to the await p1
that waits for p1
to settle as well. If everything goes well, the two Promises are run in parallel. But when there are exceptions, the flaws of this structure shows:
const wait = (ms) => new Promise((res) => setTimeout(res, ms));
(async () => {
try{
const p1 = wait(3000).then(() => {throw new Error("err")}); // uncaught
await wait(2000).then(() => {throw new Error("err2")}); // caught
await p1;
}catch(e) {
console.log(e);
}
})();
This produces this log:
Error: err2
Uncaught (in promise) Error: err
The reason behind this is that only the await
throws an exception that the try..catch
can handle, and the first await
is for the second Promise, after starting the first one. If that is rejected, the program flow jumps over the second await
so that the rejection of the first Promise will be unhandled.
The solution is to use Promise.all
for parallelization:
await Promise.all([
wait(1000).then(() => {throw new Error("err")}), // p1
wait(2000),
]);
This handles both errors, even though only the first one will be thrown.
Related
How Promise states and the async statement work to return an async value
Reduce the total time by running multiple jobs in parallel
Special case
There is an interesting case here. What happens if the first Promise is rejected before the await
for it? For example, p1
will be rejected in 1 second, but the await p1
will be called in 2 seconds:
const wait = (ms) => new Promise((res) => setTimeout(res, ms));
(async () => {
try{
const p1 = wait(1000).then(() => {throw new Error("err")});
await wait(2000);
await p1;
}catch(e) {
console.log(e);
}
})();
Running this in the browser changes the exception from uncaught to caught after 1 second. In NodeJs, the logs preserve what is happening:
(node:29493) UnhandledPromiseRejectionWarning: Error: err
at /tmp/test.js:5:41
(node:29493) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:29493) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Error: err
at /tmp/test.js:5:41
(node:29493) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1)
While it technically handles the async exception, I wouldn’t call this a good solution. Use the Promise.all
instead.
Event listeners
A common source of unhandled exceptions are in callbacks, such as event listeners:
document.querySelector("button").addEventListener("click", async () => {
throw new Error("err"); // uncaught
});
On the other hand, there is no difference between the sync and the async versions, both produce uncaught exceptions:
document.querySelector("button").addEventListener("click", () => {
throw new Error("err"); // uncaught
})
Use a try..catch
inside the event handler to catch errors.
Promise constructor
The Promise constructor handles synchronous errors and rejects the Promise in that case:
new Promise(() => {
throw new Error("err");
}).catch((e) => {
console.log(e); // caught
});
This is convenient as most errors are automatically propagated in an async function/Promise chain. But it only works for synchronous errors. If there is an exception in a callback, it will be uncaught:
new Promise(() => {
setTimeout(() => {
throw new Error("err"); // uncaught
}, 0);
}).catch((e) => {
console.log(e);
});
The solution is to do one thing in a Promise constructor and use chaining to make more complex operations.
Instead of:
new Promise((res, rej) => {
setTimeout(() => { // 1
connection.query("SELECT ...", (err, results) => { // 2
if (err) {
rej(err);
}else {
const r = transformResult(results); // 3
res(r);
}
});
}, 1000);
});
Separate the 3 operations into 3 different stages:
new Promise((res, rej) => {
setTimeout(res, 1000); // 1
}).then(() => {
connection.query("SELECT ...", (err, results) => { // 2
if (err) {
rej(err);
}else {
res(results);
}
});
}).then((results) => transformResult(results)); // 3
This way, any typos or other synchronous errors will be propagated down the chain and a .catch()
or an await
will handle it.
Related
Convert a series of then() functions to async/await without losing function scoping
Conclusion
Uncaught errors can cause many problems besides just showing up in the browser/NodeJs console. They are a signal that error handling is missing in some places and that results in unreliable code.
Keeping in mind that errors can happen mostly anywhere in the code, async errors can have surprising characteristics. In this article, we’ve discussed some of the potential problems and their solutions.