デコードされたオーディオ (バッファー内に配置されている) を識別したいので、 for ループ パラメーター i を内側のクロージャーに与えようとしています。
このコードはエラーを出します: e は定義されていません。ただし、 )(test) を削除すると機能します。これは、すべての結果に対して test が list.length と等しいことを意味しますが、呼び出されたときに現在のパラメーター i の値が必要です。
for (var i = 0; i < list.length; i++) { //load in every url
requestArray.push(new XMLHttpRequest());
requestArray[i].open('GET', list[i].url, true);
requestArray[i].responseType = 'arraybuffer';
test = i;
requestArray[i].onload = (function (e) {
//Async method: ASK J
context.decodeAudioData(e.target.response, (function (buffer) { //Async method
console.log(test);
if (!buffer) {
alert('error decoding file data: ');
return;
}
})(test),
function (e) {
console.log('Error decoding audio file', e)
});
})(test);
requestArray[i].onerror = function () {
alert('BufferLoader: XHR error');
}
requestArray[i].send();
}