【问题标题】:Out of Scope Objects in NodeJSNodeJS 中的超出范围的对象
【发布时间】:2015-01-26 21:11:19
【问题描述】:

当节点应用程序触发事件时,我使用audio-player package 在本地播放声音。触发事件时,会调用一个函数,并使用需要打开的特定文件:

playSound(fileName);

单独的函数如下所示:

player = new Player('someDirectory/' + fileName + '.mp3');
player.play();

这将打开并开始完美播放文件,但是当事件快速连续触发时,两种声音将同时播放。虽然我最初想简单地添加一个:

player.stop();

在“新玩家”定义之前,前一个实例显然超出了范围,因为该函数已被第二次调用。如何在重新开始播放之前停止所有其他 Player 实例?

【问题讨论】:

    标签: javascript node.js scope


    【解决方案1】:

    您需要在外部范围内声明player 变量,以便每个函数“看到”同一个播放器。

    var player;
    
    function playSound(fileName) {
        if (player) {
            player.stop();
        }
    
        player = new Player(fileName);
        player.play();
    }
    

    这称为闭包。

    【讨论】:

    • 啊,太好了。我应该知道每次调用都会重新分配玩家。感谢您的现场回答!
    【解决方案2】:

    您的播放器应该是静态的,应该只存在一个实例并播放所有声音。

    function Podcast() {};
    
    Podcast.FILE_EXTENSION = 'mp3';
    Podcast.download = function(podcast) {
        console.log('Downloading ' + podcast + ' ...');
    };
    

    在这里,我们创建了一个名为 Podcast 的构造函数,其中包含一个名为 FILE_EXTENSION 的静态属性和一个名为 download 的静态方法。

    http://elegantcode.com/2011/01/19/basic-javascript-part-7-static-properties-and-methods/

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 2012-04-14
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多