簡體   English   中英

FileReader的Promise功能過早解決

[英]Promise function with FileReader resolves prematurely

我正在打開一個文件來讀取內容,如下所示:

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 ,其中包括來自convertBlobToBase64的轉換后的數據,而不是未解析的convertBlobToBase64 ,該nextPromise預期在nextPromise上等待。

相反,myFunction的.then會立即調用,因為它沒有正確的數據而失敗。 我是否誤解了Promise功能?

試試這個代碼:

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

順便說一句,您不需要將另一個Prom包裝到函數。 您可以將postCall用作解析函數並將其鏈接起來,如下所示:

myFunction(audioFile){
  return convertBlobToBase64(audioFile)
    .then(base64Val => postCall())
    .then(//stuff)
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM