我正在使用名为IonSound.js
的声音播放器,可在此处找到。 http://ionden.com/a/plugins/ion.sound/en.html
根据文档,我可以像这样监听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
。
问题是,它变得像这样一团糟。我想做的是宣传我的Sound类,所以我可以这样使用它:
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();
有什么想法吗?
答案 0 :(得分:3)
不要在<header>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">
{{ Html::image('assets/images/logo.png') }}
</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="#">Home</a></li>
<li class=""><a href="#">About Us</a></li>
</ul>
</div>
</div>
</div>
</header>
中保留一组承诺,而是在this.promises
中保留一组承诺接受/拒绝回调。这样你就可以实现承诺。
以下是您的课程的外观:
this.promiseFulfil