![](/img/trans.png)
[英]How to create a function returning a promise that resolves after inner promise resolves
[英]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.