在外部事件事件上触发Promise.fulfill

时间:2016-08-30 12:42:24

标签: javascript node.js javascript-events callback promise

我正在使用名为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();

有什么想法吗?

1 个答案:

答案 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