Функция Promise с FileReader разрешается преждевременно - PullRequest
0 голосов
/ 10 мая 2018

Я открываю файл для чтения содержимого примерно так:

convertBlobToBase64(blob){
    var convertPromise = new Promise(function(resolve, reject){
      var fileReader = new FileReader();
      fileReader.onload = function() {
          var dataUrl = this.result;
          var base64 = dataUrl.split(',')[1];
          resolve(base64);
      };

      fileReader.readAsDataURL(blob);
    });

    return convertPromise;
  }

Затем я вызываю эту функцию и передаю данные результата, когда она разрешается:

myFunction(audioFile){
    var to64 = this.convertBlobToBase64(audioFile);
    to64.then(function(base64Val){
        var nextPromise = postCall();
        nextPromise.then(//stuff);
        return nextPromise;
    });

    return to64;
} 

Однако, когда я вызываю myFunction, он немедленно возвращает разрешенное обещание, которое включает преобразованные данные из convertBlobToBase64, а не неразрешенное обещание, которое должно ожидаться на nextPromise, как и ожидалось.

Вместо этого, myFunction's .then вызывается немедленно и завершается ошибкой, так как не содержит правильных данных. Я неправильно понимаю функцию Promise?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Между прочим, вам не нужно заключать еще одно обещание в функцию.Вы можете использовать свой postCall для разрешения функций и связать его так:

myFunction(audioFile){
  return convertBlobToBase64(audioFile)
    .then(base64Val => postCall())
    .then(//stuff)
} 
0 голосов
/ 10 мая 2018

Попробуйте этот код:

myFunction(audioFile){
    var to64 = this.convertBlobToBase64(audioFile);
    return to64.then(function(base64Val){
        var nextPromise = postCall();
        return nextPromise.then(//stuff);
    });
} 
...