【问题标题】:Passing arugments to callback function将参数传递给回调函数
【发布时间】:2017-11-22 09:56:37
【问题描述】:

我正在尝试将参数传递给回调函数,它实际上允许传递参数,但是会引发一个随机错误,指出未定义回调函数中的变量。

这里是函数:

function trackLoader(track) { 
    myPlayer[0] = new Tone.Player("Audio/" + track + ".wav", callBack);
}

这里是回调函数:

function callBack() {
   myPlayer[0].loop = true;
   myPlayer[0].sync();
   myPlayer[0].start();
}

正如您从上面看到的,我只想将播放器的索引传递给回调函数。在此先感谢,马特

【问题讨论】:

  • 什么变量导致错误?
  • 不清楚你的代码到底在做什么; myPlayer 看起来像上面的全局变量,因此回调可以访问。请使用 minimal reproducible example 来更新您的问题,以展示问题,最好是使用 Stack Snippets([<>] 工具栏按钮;here's how to do one可运行
  • 这取决于Tone.Player()如何调用你的回调;如果它绑定了Player 实例,只需调用this.loop = true; 等等
  • 如果您分享实际错误会有所帮助
  • 对不起,我没说清楚,上面的代码没有错误,但是如果我尝试通过回调函数传递参数,我会抛出错误。跨度>

标签: javascript function callback arguments


【解决方案1】:

Tone.Player 将不带参数地调用你的回调函数。你可以给它一个匿名函数,它会用你想要的索引调用回调。


function trackLoader(track) {
   const index = 0;

   myPlayer[index] = new Tone.Player('Audio...wav', () => callBack(index));
}

function callBack(index) {
   myPlayer[index].loop = true;
   myPlayer[index].sync();
   myPlayer[index].start();
}


PS:我认为Tone.Player会回调特殊数据以防出错。你一定要检查一下。

【讨论】:

    【解决方案2】:

    我建议将变量设为全局变量,它应该可以工作,但我不太确定这是否是最佳解决方案。

    var myPlayer;
    
    function trackLoader(track) {
      myPlayer[0] = new Tone.Player("Audio/" + track + ".wav", callBack);
    }
    
    function callBack() {
      myPlayer[0].loop = true;
      myPlayer[0].sync();
      myPlayer[0].start();
    }

    【讨论】:

    • 尊敬的投反对票的人,请解释投反对票的原因。
    • OP 的当前代码没有出错,当他尝试以他认为允许他通过索引的方式更改代码时出错。您修复了一个从一开始就不存在的错误。
    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多