Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:BufferLoader。。。loader.onload不是一个函数_Javascript - Fatal编程技术网

JavaScript:BufferLoader。。。loader.onload不是一个函数

JavaScript:BufferLoader。。。loader.onload不是一个函数,javascript,Javascript,因此,我正在使用这个类BufferLoader,我得到一个错误,它说: 未捕获类型错误:loader.onload不是函数: 有没有办法解决这个问题,但保持代码运行不变 function BufferLoader(context, urlList, callback) { this.context = context; this.urlList = urlList; this.onload = callback; this.bufferList = new Array();

因此,我正在使用这个类BufferLoader,我得到一个错误,它说:

未捕获类型错误:loader.onload不是函数:

有没有办法解决这个问题,但保持代码运行不变

function BufferLoader(context, urlList, callback) {
  this.context = context;
  this.urlList = urlList;
  this.onload = callback;
  this.bufferList = new Array();
  this.loadCount = 0;
}

BufferLoader.prototype.loadBuffer = function(url, index) {
  // Load buffer asynchronously
  var request = new XMLHttpRequest();
  request.open("GET", url, true);
  request.responseType = "arraybuffer";

  var loader = this;

  request.onload = function() {
    // Asynchronously decode the audio file data in request.response
    loader.context.decodeAudioData(
      request.response,
      function(buffer) {
        if (!buffer) {
          alert('error decoding file data: ' + url);
          return;
        }
        loader.bufferList[index] = buffer;
        if (++loader.loadCount == loader.urlList.length)
          loader.onload(loader.bufferList); // <<<****************************** here
      },
      function(error) {
        console.error('decodeAudioData error', error);
      }
    );
  }

  request.onerror = function() {
    alert('BufferLoader: XHR error');
  }

  request.send();
}

BufferLoader.prototype.load = function() {
  for (var i = 0; i < this.urlList.length; ++i)
  this.loadBuffer(this.urlList[i], i);
}

创建新的缓冲加载程序时没有分配回调函数,因此onload将是未定义的

要修复此问题,您必须执行以下操作:

try { context = new AudioContext(); }
catch(e) { alert("Web Audio API is not supported.") }

beatsPerMinute = 120;

bufferLoader = new BufferLoader(
  context,
  [
    "bass/dual_bass_1.wav",
    "bass/fusion_bass_c3.wav",
    "bass/fusion_accoustic_bass_c2.wav",
    "bass/casio_mt_45_bass_c2.wav",
    "bass/casio_cz_5000_synth_bass_c1.wav",
    "bass/bowed_bass_c2.wav",
    "bass/sanctuary_qcard_accoustic_bass_c2.wav"
  ],
  function(bufferList) {
    // Do stuff...
  }
);

bufferLoader.load();
});

您如何使用
BufferLoader
?您正在创建它的新实例吗?i、 e.
new BufferLoader(context,urlist,callback)
如果有人向您的构造函数传递了no
callback
,那么
。onload
将不是一个函数。更新以显示类是如何被调用的……好的,我将测试它!
try { context = new AudioContext(); }
catch(e) { alert("Web Audio API is not supported.") }

beatsPerMinute = 120;

bufferLoader = new BufferLoader(
  context,
  [
    "bass/dual_bass_1.wav",
    "bass/fusion_bass_c3.wav",
    "bass/fusion_accoustic_bass_c2.wav",
    "bass/casio_mt_45_bass_c2.wav",
    "bass/casio_cz_5000_synth_bass_c1.wav",
    "bass/bowed_bass_c2.wav",
    "bass/sanctuary_qcard_accoustic_bass_c2.wav"
  ],
  function(bufferList) {
    // Do stuff...
  }
);

bufferLoader.load();
});