Я использую звуковой плеер под названием IonSound.js
, который можно найти здесь. http://ionden.com/a/plugins/ion.sound/en.htmlTriggering Promise.fulfill на внешнем событии
Согласно документации, я могу слушать sound.ended
событие так:
ion.sound({
sounds: [
{name: "door_bump"},
{name: "water_droplet_2"},
{name: "water_droplet_3"}
],
ended_callback: function (sound) {
// sound ended
game.sound.soundEnded(sound);
}
});
Я сделал очень простую обертку на вершине этого.
class Sound
{
constructor(ion) {
this.ion = ion;
this.promises = {};
}
play(sound) {
if (game.settings.muted === false) {
this.ion.sound.play(sound);
}
this.promises[sound] = new Promise((accept, reject) => {
});
return this.promises[sound];
}
soundEnded(sound) {
if (this.events.hasOwnProperty(sound.name) === true) {
Promise.resolve(this.promises[sound.name])
}
}
}
Прямо сейчас, когда я выполнить следующий код:
game.sound.play("level-up");
ended_callback
триггеров. Затем он вызывает sound.soundEnded
.
Проблема в том, что это становится беспорядком. То, что я хочу сделать вместо этого promisifying мой звук класс, так что я могу использовать его так:
game.sound.play("level-up").then(() => {
console.log("Sound is over.");
});
Для того, чтобы сделать это, этот кусок кода должен fulfill()
мое обещание, что я держал на this.promises
хэш.
Promise.resolve(this.promises[sound.name]);
, но он не имеет каких-либо методов, чтобы вызвать выполнить так:
this.promises[sound.name].fulfill();
Есть идеи?
Вы удивительно. Бог благословит ваш дож! – Aris