Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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中返回null的函数_Javascript - Fatal编程技术网

javascript中返回null的函数

javascript中返回null的函数,javascript,Javascript,我有以下功能 function calculateMFCC (wavFile, clipID) { var audioData = loadAudioData(wavFile); clipId = clipID; passToWavReader(audioData); } 函数loadAudioData(wavFile)应该使用Ajax加载wav文件,并将结果作为arraybuffer返回。这就是它的样子: function loadAudioData(wavFile) { v

我有以下功能

function calculateMFCC (wavFile, clipID) {
  var audioData = loadAudioData(wavFile);
  clipId = clipID;
  passToWavReader(audioData);
}
函数loadAudioData(wavFile)应该使用Ajax加载wav文件,并将结果作为arraybuffer返回。这就是它的样子:

function loadAudioData(wavFile) {
  var request = new XMLHttpRequest();
    request.open('GET', wavFile, false);
    //request.responseType = 'arraybuffer';
    request.onload = function() {
        var audioData = stringToArrayBuffer(request.response);
      //passToWavReader(audioData);
      return audioData;
    }
    request.send();
}

当我调试脚本时,我看到在loadAudioData(wavFile)函数中,变量audioData得到了它应该得到的值,但是当它返回到函数calculateMFCC(wavFile,clipID)时,audioData的值是未定义的,因此当它调用passToWavReader(audioData)时,脚本中断。因此,calculateMFCC中的audioData变量不知何故没有从loadAudioData中获取值。

问题在于XMLHttpRequest不会立即响应。您需要添加一个回调。尝试:

function calculateMFCC (wavFile, clipID) {
  loadAudioData(wavFile, function(audioData) {
    clipId = clipID;
    passToWavReader(audioData);
  });
}

function loadAudioData(wavFile, callback) {
  var request = new XMLHttpRequest();
  request.open('GET', wavFile, false);
  //request.responseType = 'arraybuffer';
  request.onload = function() {
    var audioData = stringToArrayBuffer(request.response);
    //passToWavReader(audioData);
    callback(audioData);
  }
  request.send();
}

提示:返回语句在哪个函数中?在异步中使用承诺a。您正在尝试在调用返回之前使用该值。在使用异步函数时,无论它们是否包含在其他看起来是同步的函数中,都必须有不同的想法。@nnnnnn哦,谢谢。我没有想到这一点。