Ожидание события, пока не будет продолжен код - PullRequest
0 голосов
/ 28 марта 2019

Я снова вернулся, снова. У меня возник вопрос о проблеме с Discord.js. Итак, я хотел бы проверить, присоединился ли пользователь к voiceChannel, когда тот же пользователь использовал команду. Затем, когда он подключился к голосовому каналу, я бы хотел, чтобы этот слушатель не слушал это событие.

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

if (!message.member.voiceChannel) {
    // Request to join voiceChannel.
}

После этого мне отправлено сообщение «Пожалуйста, присоединитесь к голосовому каналу» или что-то еще, неважно. Однако важно то событие, которое я бы хотел послушать, что-то вроде voiceStateUpdate. Я хотел бы подождать, пока не сработает это событие (например, когда пользователь подключился к голосовому каналу), а затем выполнить оставшуюся часть кода.

await Client.on("voiceStateUpdate", function (Old, member) {
    // Do stuff, event got fired.
});

Наконец, я хотел бы знать, возможно ли это правильно или нет. Ожидание, что кто-то присоединится к каналу, затем продолжение с остальными.

Спасибо. ~ Q

1 Ответ

0 голосов
/ 29 марта 2019

Как упомянул bambam в своем комментарии, вы не можете ожидать обратного вызова ... На самом деле, в этом весь смысл обратного вызова - поддерживать основной поток свободным / работающим, пока большое действие завершено.

Я не знаю тонкостей библиотеки Discord, так что может быть версия обещания функции Client.on(voiceStatusUpdate) ... но просто с точки зрения ванильного JS вы можете обернуть существующий код в обещание, иawait завершение обещания:

await new Promise( (resolve, reject) => {
    Client.on("voiceStateUpdate", function (Old, member) {
        // Do stuff, event got fired.
        // After you've finished doing your stuff here, tell the promise you're finished.
        // Then, since the promise has "resolved", the code will continue past the "await"d line
        resolve()
    });
})

* Обратите внимание, что вам нужно пометить родительскую функцию ключевым словом async, чтобы использовать await внутри нее.... но если вы возитесь с async / await, я думаю, вы, вероятно, уже знакомы с этим требованием.

...